일부 텍스트를 검색하기 위해 사용자의 입력을 정규식 패턴으로 사용하고 싶습니다. 작동하지만 사용자가 정규식에 의미가있는 문자를 넣는 경우를 어떻게 처리 할 수 있습니까? 예를 들어, 사용자는 Word를 검색하려고합니다 (s)
. 정규식 엔진이 (s)
그룹을 사용합니다. 문자열처럼 취급하고 싶습니다 "(s)"
. 나는 실행할 수있는 replace
사용자 입력과 교체 (
로 \(
와 )
함께 \)
하지만 문제는 모든 가능한 정규식 기호를 위해 교체해야 할 것입니다. 더 나은 방법을 알고 있습니까?
답변
이 re.escape()
기능을 사용하십시오 .
탈출 (문자열)
영숫자가 아닌 모든 문자가 백 슬래시 인 문자열을 반환합니다. 정규 표현식 메타 문자가있는 임의의 리터럴 문자열을 일치시키려는 경우에 유용합니다.
간단한 예를 들어, 제공된 문자열의 발생을 선택적으로 선택적으로 ‘s’다음에 검색하고 일치 오브젝트를 리턴합니다.
def simplistic_plural(word, text):
word_or_plural = re.escape(word) + 's?'
return re.match(word_or_plural, text)
답변
re.escape () 사용할 수 있습니다 :
re.escape (string) 영숫자가 아닌 모든 문자가 백 슬래시 인 문자열을 반환합니다. 정규 표현식 메타 문자가있는 임의의 리터럴 문자열을 일치시키려는 경우에 유용합니다.
>>> import re
>>> re.escape('^a.*$')
'\\^a\\.\\*\\$'
답변
불행히도 re.escape()
교체 문자열에는 적합하지 않습니다.
>>> re.sub('a', re.escape('_'), 'aa')
'\\_\\_'
해결책은 교체품을 람다에 넣는 것입니다.
>>> re.sub('a', lambda _: '_', 'aa')
'__'
람다의 반환 값은 re.sub()
리터럴 문자열로 처리되기 때문 입니다.
답변
시도하십시오 :
앵커로서의 \ Q 및 \ E
전체 단어 또는 정규식과 일치하도록 Or 조건을 설정하십시오.
참조 링크 : 정규식에 특수 문자가 포함 된 전체 단어를 일치시키는 방법