programing tip

정규식을 기준으로 분할 문자열

itbloger 2020. 7. 17. 20:57
반응형

정규식을 기준으로 분할 문자열


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

>>> 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/split-string-based-on-a-regular-expression

반응형