2012-02-21 6 views
0
IDLE 1.1.4  
>>> import re 
>>> some_text = 'alpha, beta,,,,gamma delta' 
>>> re.split('[, ]+', some_text) 
['alpha', 'beta', 'gamma', 'delta'] 
# when the pattern doesn't contain parentheses, the returned values 
# only include matched substrings but separators. 

>>> re.split('([, ]+)', some_text) 
['alpha', ', ', 'beta', ',,,,', 'gamma', ' ', 'delta'] 
# returned values include separators and I can guess how it works. 

>>> re.split('([, ])+', some_text) 
['alpha', ' ', 'beta', ',', 'gamma', ' ', 'delta'] 
# Now I cannot even guess what is going on here. 

질문>'([, ]+)''([, ])+' 차이는 무엇입니까? 반환 값에 어떤 영향을 줍니까?간의 매칭 패턴의 차이 '([,] +)'와 '([,]) +'

+1

're.search()'와 일치시켜보고 일치하는 항목을 볼 수도 있습니다. 그룹과의'split' 행동은 여기에 추가적인 복잡성을 가져옵니다. – tripleee

답변

3

([, ]+)을 반환에 ,,,,가있는 경우

1

일치하는 그룹보기.

  • ([, ]+)이 그 문자의 긴 사슬을 포착하는 1 명 이상의 ,의 발생 또는 공간을 일치하고 그들 모두를 반환합니다.
  • ([, ])+ 공백 또는 ,과 일치하고이를 그룹으로 반환합니다.
+0

패턴이 '([,]) +'이면 두 번째로 반환 된 항목 ''을 설명하는 방법은 무엇입니까?알파와 베타 사이의 부분 문자열에는 ','왜 ''만 반환합니까? – q0987

+0

먼저','를 발견했기 때문에. – Blender

+0

','가 처음으로 발견되면, 왜'' ''를 먼저 리턴할까요? – q0987

4

이전의 경우 ""와 ","의 모든 인스턴스를 그룹으로 그룹화하는 반면, 후자는 마지막 그룹 만 포함하는 그룹을 반환합니다. 당신의 문자열, 당신의 패턴이 ([, ]+) 때이 그룹 ,,,,를 반환하고 패턴이 ([, ])+ 경우가 ,

2

말한다 "일치 하나 이상의 쉼표 및/또는 공백 캡처 두 번째 예제에서는 하나의 그룹으로 반환 된 구분 기호 숯불 문자의 전체 문자열을 볼 수 있습니다.

([, ])+은 "하나의 쉼표 또는 공백과 일치하고 이들 중 하나 이상의 그룹을 캡처합니다"라고 말합니다. 따라서 세 번째 예에서 각 구분 기호 문자는 자체 그룹에 캡처되며 매번 이러한 구분 기호의 마지막 부분 만 가져옵니다.

1

변경 아래 ABCD로 쉼표가 시각적으로 볼 수 :

some_text2 = 'alphaA betaABCDgamma 델타'

re.split를 ('([ABCD]) +'some_text2)

실제로 각 쉼표와 일치하지만 1 문자 그룹으로 표시됩니다. [ 'alpha', 'beta', 'D', ' +는 문자 클래스의 문자와 더 이상 일치하지 않을 때까지 탐욕적인 일치로 바꿉니다.

의 +

re.split ('([ABCD])', some_text2)

[ '알파' 'A', ', '없이

시도 ' 베타 ' 'A ', ', 'B', ', 'C ', ', 'D', '감마' ', ', ' ', '', '', 'delta']