정규식 오류-반복 할 사항 없음
이 식을 사용할 때 오류 메시지가 나타납니다.
re.sub(r"([^\s\w])(\s*\1)+","\\1","...")
RegExr 에서 정규식을 확인 했는데.
예상대로 반환 됩니다. 그러나 Python에서 시도하면 다음 오류 메시지가 나타납니다.
raise error, v # invalid expression
sre_constants.error: nothing to repeat
누군가 설명해 주시겠습니까?
파이썬 버그 인 것 같습니다 (vim에서 완벽하게 작동합니다). 문제의 원인은 (\ s * ...) + 비트입니다. 기본적으로, 당신은 (\s*)+
null이 될 수있는 것을 반복하려고하기 때문에 의미 가 있는 것을 할 수 없습니다 .
>>> re.compile(r"(\s*)+")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/re.py", line 180, in compile
return _compile(pattern, flags)
File "/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/re.py", line 233, in _compile
raise error, v # invalid expression
sre_constants.error: nothing to repeat
그러나 (\s*\1)
null이 아니어야하지만 \ 1에 무엇이 있는지 알기 때문에 알 수 있습니다. 분명히 파이썬은 ... 이상하지 않습니다.
이것은 "*"와 특수 문자 사이의 파이썬 버그입니다.
대신에
re.compile(r"\w*")
시험:
re.compile(r"[a-zA-Z0-9]*")
작동하지만 동일한 정규식을 만들지는 않습니다.
이 버그는 2.7.5에서 2.7.6 사이에서 수정 된 것으로 보입니다.
실제로 *가있는 파이썬 버그 일뿐만 아니라 컴파일 할 정규 표현식의 일부로 문자열을 전달할 때도 발생할 수 있습니다.
import re
input_line = "string from any input source"
processed_line= "text to be edited with {}".format(input_line)
target = "text to be searched"
re.search(processed_line, target)
예를 들어 화학 공식에서 찾을 수있는 것처럼 처리 된 줄에 일부 "(+)"가 포함 된 경우 오류가 발생합니다. 해결책은 탈출하는 것이지만, 즉석에서 할 때 제대로하지 못할 수도 있습니다.
발견 및 수정 된 버그 외에도 오류 메시지 sre_constants.error: nothing to repeat
가 약간 혼란 스럽다는 점에 주목하겠습니다 . 나는 r'?.*'
패턴 으로 사용하려고했고 에 대해 이상한 이유로 불평한다고 생각 *
했지만 실제로 문제는 그것이 ?
"0 회 또는 1 회 반복"이라고 말하는 방식이라는 것입니다. 그래서 나는 r'\?.*'
리터럴과 일치 하도록 말해야 했습니다?
참고 URL : https://stackoverflow.com/questions/3675144/regex-error-nothing-to-repeat
'programing tip' 카테고리의 다른 글
쉘 스크립트에서 특정 줄을 주석 처리하는 방법 (0) | 2020.12.13 |
---|---|
PHP : mysql_real_escape_string이 사용자 입력을 정리하기에 충분합니까? (0) | 2020.12.13 |
컴퓨터가 절전 모드가되면 setTimeout은 어떻게됩니까? (0) | 2020.12.13 |
파일에 안전하게 쓰는 Python 다중 처리 (0) | 2020.12.12 |
SCRIPT438 : 개체가 속성 또는 메서드 IE를 지원하지 않습니다. (0) | 2020.12.12 |