programing

re.split("()+")로 문자열을 분할할 때 결과 목록에 공백이 하나 있습니다. 더 나은 방법이 있습니까?

lastmoon 2023. 6. 6. 10:32
반응형

re.split("()+")로 문자열을 분할할 때 결과 목록에 공백이 하나 있습니다. 더 나은 방법이 있습니까?

명령어 출력을 표 형식으로 가지고 있습니다.결과 파일의 출력을 구문 분석하여 문자열에 저장하고 있습니다.한 행의 각 요소는 하나 이상의 공백 문자로 구분되므로 정규식을 사용하여 하나 이상의 공백을 일치시키고 분할합니다.그러나 모든 요소 사이에 공백이 삽입됩니다.

>>> str1 = "a    b     c      d"  # spaces are irregular
>>> str1
'a    b     c      d'
>>> str2 = re.split("( )+", str1)
>>> str2
['a', ' ', 'b', ' ', 'c', ' ', 'd']  # 1 space element between!

이것을 하는 더 좋은 방법이 있습니까?

각 분할 후str2목록에 추가됩니다.

을 사용하여(,)그룹을 캡처하는 중입니다. 그룹을 제거하기만 하면 이 문제가 발생하지 않습니다.

>>> str1 = "a    b     c      d"
>>> re.split(" +", str1)
['a', 'b', 'c', 'd']

하지만 정규식이 필요하지 않습니다.str.split구분 기호를 지정하지 않으면 공백으로 구분됩니다.이 경우에는 이것이 가장 좋은 방법일 것입니다.

>>> str1.split()
['a', 'b', 'c', 'd']

정규식을 정말 원했다면 이것을 사용할 수 있습니다.'\s'공백을 나타내며 더 선명함):

>>> re.split("\s+", str1)
['a', 'b', 'c', 'd']

또는 공백이 아닌 모든 문자를 찾을 수 있습니다.

>>> re.findall(r'\S+',str1)
['a', 'b', 'c', 'd']

str.split메소드는 항목 사이의 모든 공백을 자동으로 제거합니다.

>>> str1 = "a    b     c      d"
>>> str1.split()
['a', 'b', 'c', 'd']

문서는 다음과 같습니다. http://docs.python.org/library/stdtypes.html#str.split

사용할 때re.split분할 패턴에는 캡처 그룹이 포함되며 그룹은 출력에 유지됩니다.이 옵션을 사용하지 않으려면 캡처하지 않는 그룹을 대신 사용하십시오.

사실 매우 간단합니다.사용해 보십시오.

str1="a    b     c      d"
splitStr1 = str1.split()
print splitStr1

언급URL : https://stackoverflow.com/questions/10974932/the-result-list-contains-single-spaces-when-splitting-a-string-with-re-split

반응형