주어진 정규 표현식에 캡처 그룹이 몇 개 있는지 확인하는 방법이 있습니까?파이썬 정규 표현식에서 캡처 그룹 수 알아보기
나는 follwing을 할 수 있도록하고 싶습니다 :이 날처럼 물건을 수행 할 수 있습니다
def groups(regexp, s):
""" Returns the first result of re.findall, or an empty default
>>> groups(r'(\d)(\d)(\d)', '123')
('1', '2', '3')
>>> groups(r'(\d)(\d)(\d)', 'abc')
('', '', '')
"""
import re
m = re.search(regexp, s)
if m:
return m.groups()
return ('',) * num_of_groups(regexp)
그러나
first, last, phone = groups(r'(\w+) (\w+) ([\d\-]+)', 'John Doe 555-3456')
, 나는 num_of_groups
을 구현하는 방법을 모르겠어요. (현재 난 그냥 해결.)
편집 :advice from rslite에 따라, 나는 re.search
로 re.findall
을 교체했다.
sre_parse
은 가장 견고하고 포괄적 인 솔루션처럼 보이지만 트리를 통과해야하며 약간 무거워 보입니다.
MizardX의 정규 표현식이 모든 기반을 덮는 것처럼 보이므로 그걸로 갈 것입니다.
실제로 그룹 수를 반환하지는 않으며 모든 그룹의 튜플을 반환합니다. 그룹 수를 반환하려면 파이썬 3.4에서 다음 코드가 필요합니다 :'return len (re.compile (regex) .groups())' –
@RaziShaban're.compile (regex) .groups '는'int' 타입의 속성입니다. 're.compile (regex) .match (input) .groups()'메소드는'tuple'을 리턴합니다. –
오른쪽, 죄송합니다, 나는 findall로 일하고 있었고, 컴파일하지 않았습니다. 내가 작성한 포인트는 함수의 이름이'num_groups'이지만 숫자가 아닌 튜플을 반환한다는 것입니다. –