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


143

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

>>> 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목록에 추가됩니다.


1
나는이 질문을 downvoted. 이유는 질문 자체가 관련이 있지만 주어진 예제는 실제로 요청 된 솔루션을 요구하기에 충분하지 않기 때문입니다. 예를 들어 단어 블록, 숫자 블록이 있고 다른 변수로 분리하려는 경우 정규식이 필요합니다.
erikbwork

@erikbwork 결과 문자열에서 원하지 않는 공간 항목을 제거하고 싶었습니다'str2'
user2763554

1
str1.split(). 간단히을 사용하여이를 달성 할 수 있습니다 . 정규식이 필요하지 않습니다.
erikbwork

답변:


176

사용하여 (, )당신은 당신이 단순히 그들을 제거하면이 문제가되지 않습니다 그룹을 캡처.

>>> 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']

4
간단하게 유지하십시오. str.split: 최고
jamylak

withspace로 시작하고 끝나는 문자열이 있으면 어떻게 사용할 수 있습니까? 예 : 'abc de'. 이를 위해 출력은 다음과 같이 나타납니다['', 'a', 'b', 'c', 'de', '']
Rakholiya Jenish

@RakholiyaJenishstr1.split()
jamylak

@jamylak string.split()은 옵션입니다. 정규식으로도 할 수 있는지 묻고 있었습니까?
Rakholiya Jenish 2016 년

2
@RakholiyaJenish re.findall옵션을 사용할 수 없습니까?
jamylak


7

사용 re.split하고 분할 패턴에 캡처 그룹이 포함 된 경우 그룹은 출력에 유지됩니다. 이를 원하지 않으면 대신 비 캡처 그룹을 사용하십시오.


2
str.split예를 들어 사용하는 것이 좋습니다. 나는 왜 당신이 행동을하는지 설명하고 싶었습니다.
BrenBarn

2

실제로 매우 간단합니다. 이 시도:

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

2
나는 이것을 +1하지만 당신은 못생긴 세미콜론을 사용하고 있습니다.
jamylak

3
@jamylak Lol. 내가 바꿔 줄게 :) 자바와 파이썬 사용 습관!
저주

1
G 그냥 공간으로 분할하고자하는 경우, 당신은해야한다 간단하게 사용stringToSplit.split()
저주
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.