파이썬 욕심없는 정규식
"a (b) c (d) e"python이 "b) c (d"대신 "b"와 일치하도록 "(. *)"와 같은 파이썬 정규식을 어떻게 만드나요?
"."대신 "[^)]"을 사용할 수 있다는 것을 알고 있지만 정규식을 좀 더 깨끗하게 유지하는보다 일반적인 솔루션을 찾고 있습니다. 파이썬에게 "이봐, 가능한 빨리 일치시켜"라고 말하는 방법이 있습니까?
당신은 모든 강력한 '*'를 찾으십시오.
http://docs.python.org/3/howto/regex.html#greedy-versus-non-greedy
욕심없는 한정자 * ?, + ?, ?? 또는 {m, n}? [...] 가능한 적은 텍스트 를 찾습니다.
>>> 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>' 만 일치합니다 .
\\(.*?\\)작동 하지 않습니까? 이것이 욕심없는 구문입니다.
다른 사람들이? * 한정자의 수정자는 즉각적인 문제를 해결할 것이지만 조심하십시오. 정규 표현식이 작동을 멈추고 파서가 필요한 영역으로 벗어나기 시작하십시오. 예를 들어, 문자열 "(foo (bar)) baz"는 문제를 일으킬 것입니다.
욕심없는 일치를 사용하는 것이 좋은 시작이지만, 나는 당신의 사용을 재고 할 것을 제안합니다 .*.
groups = re.search(r"\([^)]*\)", x)
"(b)"와 일치 하시겠습니까? Zitrax와 Paolo가 제안한대로하십시오. "b"와 일치 하시겠습니까? 하다
>>> x = "a (b) c (d) e"
>>> re.search(r"\((.*?)\)", x).group(1)
'b'
참고 URL : https://stackoverflow.com/questions/766372/python-non-greedy-regexes
'Programing' 카테고리의 다른 글
| customerrors =“On”인 경우 Application_Error가 발생하지 않습니다 (0) | 2020.07.10 |
|---|---|
| PostgreSQL에서 ON CONFLICT와 함께 RETURNING을 사용하는 방법은 무엇입니까? (0) | 2020.07.10 |
| SQL 데이터베이스 디자인 초보자 가이드 (0) | 2020.07.09 |
| IntelliJ Idea의 프로젝트 트리에서 컴파일 오류를 즉시 보는 방법은 무엇입니까? (0) | 2020.07.09 |
| SQL Server에서 한 번에 여러 열을 변경하는 방법 (0) | 2020.07.09 |