답변:
import re
p = re.compile("[a-z]")
for m in p.finditer('a1b2c3d4'):
print(m.start(), m.group())
start()
는 그룹 번호를 허용 할 수 있으므로 n 번째 그룹의 인덱스를 원하면start(n)
에서 가져옴
span ()은 단일 튜플에서 시작 및 끝 인덱스를 모두 반환합니다. match 메서드는 RE가 문자열의 시작 부분에서 일치하는지 확인하기 때문에 start ()는 항상 0입니다. 그러나 RegexObject 인스턴스의 검색 방법은 문자열을 스캔하므로이 경우 일치 항목이 0에서 시작하지 않을 수 있습니다.
>>> p = re.compile('[a-z]+')
>>> print p.match('::: message')
None
>>> m = p.search('::: message') ; print m
<re.MatchObject instance at 80c9650>
>>> m.group()
'message'
>>> m.span()
(4, 11)
다음과 결합하십시오.
Python 2.2에서는 finditer () 메서드도 사용할 수 있으며, MatchObject 인스턴스 시퀀스를 반복자로 반환합니다.
>>> p = re.compile( ... )
>>> iterator = p.finditer('12 drummers drumming, 11 ... 10 ...')
>>> iterator
<callable-iterator object at 0x401833ac>
>>> for match in iterator:
... print match.span()
...
(0, 2)
(22, 24)
(29, 31)
당신은 순서대로 뭔가를 할 수 있어야
for match in re.finditer(r'[a-z]', 'a1b2c3d4'):
print match.span()
re.search(r'abbit', "has abbit of carrot").span(0)
-(4, 9)
범위 및 그룹은 정규식의 다중 캡처 그룹에 대해 인덱싱됩니다.
regex_with_3_groups=r"([a-z])([0-9]+)([A-Z])"
for match in re.finditer(regex_with_3_groups, string):
for idx in range(0, 4):
print(match.span(idx), match.group(idx))
4
왔습니까?