"a (b) c (d) e"파이썬이 "b"대신 "b"와 일치하도록 "(. *)"와 같은 파이썬 정규 표현식을 어떻게 만들 수 있습니까? "?Python non-greedy regexes
". "대신"[^]] "을 사용할 수 있음을 알고 있지만 정규식을 조금 더 깨끗하게 유지하는보다 일반적인 솔루션을 찾고 있습니다. 파이썬에게 "어이, 가능한 빨리 일치"라고 말할 수있는 방법이 있습니까?
"a (b) c (d) e"파이썬이 "b"대신 "b"와 일치하도록 "(. *)"와 같은 파이썬 정규 표현식을 어떻게 만들 수 있습니까? "?Python non-greedy regexes
". "대신"[^]] "을 사용할 수 있음을 알고 있지만 정규식을 조금 더 깨끗하게 유지하는보다 일반적인 솔루션을 찾고 있습니다. 파이썬에게 "어이, 가능한 빨리 일치"라고 말할 수있는 방법이 있습니까?
\\(.*?\\)
작업은하지 않을까요? 그것은 욕심이없는 구문입니다.
>>> x = "a (b) c (d) e"
>>> re.search(r"\(.*\)", x).group()
'(b) c (d)'
>>> re.search(r"\(.*?\)", x).group()
'(b)'
'
*
', '+
'및 '?
'한정자 모든 욕심; 가능한 한 많은 텍스트와 일치합니다. 때때로이 동작은 바람직하지 않습니다. RE<.*>
이 '<H1>title</H1>
'과 일치하면 '<H1>
'이 아닌 전체 문자열과 일치합니다. 한정자 뒤에 '?
'을 추가하면 비 탐욕적이거나 최소한의 방식으로 일치를 수행합니다. 가능한 한 적은 수의 문자가 일치합니다. 이전 식에서.*?
을 사용하면 '<H1>
'과 만 일치합니다.
[정규식을 사용하여 HTML을 구문 분석하지 마십시오] (https://stackoverflow.com/a/1732454) –
"(b)"와 일치시겠습니까? Zitrax와 Paolo가 제안했듯이. "b"와 일치시겠습니까? ungreedy 일치하는 좋은 시작이다 사용
>>> x = "a (b) c (d) e"
>>> re.search(r"\((.*?)\)", x).group(1)
'b'
수행,하지만 난 당신이 .*
의 사용을 재고하는 것도 제안 것 - 무슨 일이 이것에 대해?
groups = re.search(r"\([^)]*\)", x)
다른 사람들이? 수식어에 * 수식어는 즉각적인 문제를 해결할 것이지만 조심해야한다. 정규 표현식이 작동을 멈추고 대신 파서가 필요한 영역으로 이탈하기 시작한다. 예를 들어, 문자열 "(foo (bar)) baz"는 문제를 일으킬 것입니다.
인터넷 아카이브에 따르면, 링크가 가리키는 모든 것은 파이썬 "re"모듈 문서의 사본이었습니다. 그래서 Trey의 링크는 잘 작동합니다. – spiffytech
이'*? '의 일반적인 영어 이름은 무엇입니까? –
와일드 카드 문자 @ Trevor Boyd Smith – Serge