[python] 파이썬에서 정규식 문자열 이스케이프

일부 텍스트를 검색하기 위해 사용자의 입력을 정규식 패턴으로 사용하고 싶습니다. 작동하지만 사용자가 정규식에 의미가있는 문자를 넣는 경우를 어떻게 처리 할 수 ​​있습니까? 예를 들어, 사용자는 Word를 검색하려고합니다 (s). 정규식 엔진이 (s)그룹을 사용합니다. 문자열처럼 취급하고 싶습니다 "(s)". 나는 실행할 수있는 replace사용자 입력과 교체 (\()함께 \)하지만 문제는 모든 가능한 정규식 기호를 위해 교체해야 할 것입니다. 더 나은 방법을 알고 있습니까?



답변

re.escape()기능을 사용하십시오 .

4.2.3 re모듈 내용

탈출 (문자열)

영숫자가 아닌 모든 문자가 백 슬래시 인 문자열을 반환합니다. 정규 표현식 메타 문자가있는 임의의 리터럴 문자열을 일치시키려는 경우에 유용합니다.

간단한 예를 들어, 제공된 문자열의 발생을 선택적으로 선택적으로 ‘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 조건을 설정하십시오.

참조 링크 : 정규식에 특수 문자가 포함 된 전체 단어를 일치시키는 방법


답변