[PYTHON] 두 문자열 사이의 정규식 일치?
PYTHON두 문자열 사이의 정규식 일치?
다음 예제처럼 모든 주석을 추출 할 수있는 방법을 찾지 못하는 것 같습니다.
>>> import re
>>> string = '''
... <!-- one
... -->
... <!-- two -- -- -->
... <!-- three -->
... '''
>>> m = re.findall ( '<!--([^\(-->)]+)-->', string, re.MULTILINE)
>>> m
[' one \n', ' three ']
2와 블록 - 나쁜 정규 표현식 때문에 가장 가능성이 일치하지 않습니다. 누군가가 올바른 방향으로 두 문자열 사이의 일치하는 항목을 추출하는 방법을 알려주십시오 수 있습니다.
안녕하세요. 의견에서 제안하신 내용을 테스트 해 보았습니다.
>>> m = re.findall ( '<!--(.*?)-->', string, re.MULTILINE)
>>> m
[' two -- -- ', ' three ']
>>> m = re.findall ( '<!--(.*\n?)-->', string, re.MULTILINE)
>>> m
[' one \n', ' two -- -- ', ' three ']
감사!
해결법
-
==============================
1.이 트릭을해야한다.
이 트릭을해야한다.
m = re.findall ( '<!--(.*?)-->', string, re.DOTALL)
-
==============================
2.일반적으로 정규 문법으로 두 구분자간에 임의의 일치를 수행하는 것은 불가능합니다.
일반적으로 정규 문법으로 두 구분자간에 임의의 일치를 수행하는 것은 불가능합니다.
특히, 중첩을 허용하는 경우,
<!-- how do you deal <!-- with nested --> comments? -->
문제를 해결할 수 있습니다. 따라서 정규 표현식으로이 특정 문제를 해결할 수는 있지만 작성한 정규식은 다른 이상한 중첩 주석에 의해 손상 될 수 있습니다.
임의의 주석을 구문 분석하려면 컨텍스트가없는 문법을 파싱하는 방법으로 이동해야합니다. 이렇게하는 간단한 방법은 푸시 다운 오토 마톤을 사용하는 것입니다.
from https://stackoverflow.com/questions/12736074/regex-matching-between-two-strings by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] int 목록을 사용하는 희소 행렬 분할 (0) | 2018.10.15 |
---|---|
[PYTHON] 부울 식을 사용하여 문자열 지정 [duplicate] (0) | 2018.10.15 |
[PYTHON] Python에서 가장 가까운 값을 찾고 배열의 인덱스를 반환합니다. (0) | 2018.10.15 |
[PYTHON] Django의 기본 키를 해당 테이블에 대해 다른 정수로 대체하는 방법 (0) | 2018.10.15 |
[PYTHON] 범위 값을 의사 색으로 (0) | 2018.10.15 |