developer tip

파이썬 문자열에서 정규식 특수 문자를 이스케이프 처리

optionbox 2020. 8. 7. 08:20
반응형

파이썬 문자열에서 정규식 특수 문자를 이스케이프 처리


파이썬에는 정규 표현식에서 특수 문자를 이스케이프하는 데 사용할 수있는 함수가 있습니까?

예를 들어는 I'm "stuck" :\이어야합니다 I\'m \"stuck\" :\\.


사용하다 re.escape

>>> import re
>>> re.escape(r'\ a.*$')
'\\\\\\ a\\.\\*\\$'
>>> print(re.escape(r'\ a.*$'))
\\\ a\.\*\$
>>> re.escape('www.stackoverflow.com')
'www\\.stackoverflow\\.com'
>>> print(re.escape('www.stackoverflow.com'))
www\.stackoverflow\.com

여기에서 반복 :

re.escape (문자열)

영숫자가 아닌 모든 백 슬래시가있는 문자열을 반환합니다. 이것은 정규식 메타 문자를 포함 할 수있는 임의의 리터럴 문자열을 일치시키려는 경우 유용합니다.


아무도 re.sub()다음을 통해 정규 표현식을 사용하지 않았다는 것에 놀랐습니다 .

import re
print re.sub(r'([\"])',    r'\\\1', 'it\'s "this"')  # it's \"this\"
print re.sub(r"([\'])",    r'\\\1', 'it\'s "this"')  # it\'s "this"
print re.sub(r'([\" \'])', r'\\\1', 'it\'s "this"')  # it\'s\ \"this\"

유의해야 할 사항 :

  • 에서 검색 패턴을 포함 \당신이 찾고있는 문자 (들)뿐만 아니라. 당신이 사용하게 될 겁니다 \탈출 할 수 있도록, 캐릭터를 탈출하는 것을 잘한다.
  • 검색 패턴을 괄호로 묶습니다 ( 예 :) ([\"]). 그러면 대체 패턴 검색 패턴 \앞에 추가 될 때 찾은 문자를 사용할 수 있습니다 . (그것이하는 일입니다 \1: 첫 번째 괄호로 묶인 그룹의 값을 사용합니다.)
  • r앞에 r'([\"])'수단은 A의 날 문자열 . 원시 문자열은 백 슬래시를 이스케이프하기 위해 다른 규칙을 사용합니다. ([\"])일반 문자열로 쓰려면 모든 백 슬래시를 두 배로하고 '([\\"])'. 정규식을 작성할 때 원시 문자열이 더 친숙합니다.
  • 에서 대체 패턴, 당신은 탈출 할 필요가 \예를 들면 대체 그룹 앞에 백 슬래시, 구별하기 위해 \1, 따라서 r'\\\1'. 쓰려면 일반 문자열로, 당신은 필요한 것 '\\\\\\1'- 그리고 아무도 그것을 원하지 않는다.

repr () [1 : -1]을 사용하십시오. 이 경우 큰 따옴표를 이스케이프 할 필요가 없습니다. [-1 : 1] 슬라이스는 시작과 끝에서 작은 따옴표를 제거하는 것입니다.

>>> x = raw_input()
I'm "stuck" :\
>>> print x
I'm "stuck" :\
>>> print repr(x)[1:-1]
I\'m "stuck" :\\

아니면 프로그램에 붙여 넣기 위해 구를 이스케이프하고 싶습니까? 그렇다면 다음을 수행하십시오.

>>> raw_input()
I'm "stuck" :\
'I\'m "stuck" :\\'

위에서 언급했듯이 대답은 귀하의 경우에 따라 다릅니다. 정규식에 대한 문자열을 이스케이프하려면 re.escape ()를 사용해야합니다. 그러나 특정 문자 집합을 이스케이프하려면 다음 람다 함수를 사용하십시오.

>>> escape = lambda s, escapechar, specialchars: "".join(escapechar + c if c in specialchars or c == escapechar else c for c in s)
>>> s = raw_input()
I'm "stuck" :\
>>> print s
I'm "stuck" :\
>>> print escape(s, "\\", ['"'])
I'm \"stuck\" :\\

그렇게 어렵지 않습니다.

def escapeSpecialCharacters ( text, characters ):
    for character in characters:
        text = text.replace( character, '\\' + character )
    return text

>>> escapeSpecialCharacters( 'I\'m "stuck" :\\', '\'"' )
'I\\\'m \\"stuck\\" :\\'
>>> print( _ )
I\'m \"stuck\" :\

If you only want to replace some characters you could use this:

import re

print re.sub(r'([\.\\\+\*\?\[\^\]\$\(\)\{\}\!\<\>\|\:\-])', r'\\\1', "example string.")

참고URL : https://stackoverflow.com/questions/4202538/escape-regex-special-characters-in-a-python-string

반응형