반응형
파이썬 문자열에서 정규식 특수 문자를 이스케이프 처리
파이썬에는 정규 표현식에서 특수 문자를 이스케이프하는 데 사용할 수있는 함수가 있습니까?
예를 들어는 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
반응형
'developer tip' 카테고리의 다른 글
ESLint 예기치 않은 isNaN 사용 (0) | 2020.08.07 |
---|---|
maven 빌드 실패 : Javac 컴파일러를 찾을 수 없음 : jre 또는 jdk 문제 (0) | 2020.08.07 |
extend ()는 jQuery에서 어떻게 작동합니까? (0) | 2020.08.07 |
iframe이 위험하고 보안 위험으로 간주되는 이유는 무엇입니까? (0) | 2020.08.07 |
SSL을 사용하는 html5 Websocket (0) | 2020.08.07 |