Python 문자열의 이스케이프 특수 문자
파이썬에는 문자열의 특수 문자를 이스케이프하는 데 사용할 수 있는 기능이 있습니까?
예를들면,I'm "stuck" :\
가 되어야 합니다I\'m \"stuck\" :\\
.
사용
>>> 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.실링(현악)
모든 영숫자가 아닌 문자열을 백슬래시로 반환합니다. 이는 정규식 메타문자가 포함된 임의의 리터럴 문자열과 일치시킬 경우 유용합니다.
파이썬 3.7 기준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
does: 첫 번째 괄호 안에 있는 그룹의 값을 사용합니다.) - 그
r
앞에r'([\"])'
생줄이라는 뜻입니다.원시 문자열은 백슬래시를 이스케이프하기 위해 다른 규칙을 사용합니다.쓰기([\"])
일반 문자열로서, 당신은 모든 백슬래시를 두 배로 늘리고 글을 써야 합니다.'([\\"])'
정규 표현식을 작성할 때 원시 문자열이 더 친숙합니다. - 대체 패턴에서, 당신은 탈출해야 합니다.
\
대체 그룹 앞에 오는 백슬래시(예:\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\" :\\
일부 문자만 바꾸려는 경우 다음을 사용할 수 있습니다.
import re
print re.sub(r'([\.\\\+\*\?\[\^\]\$\(\)\{\}\!\<\>\|\:\-])', r'\\\1', "example string.")
참고: 이 답변은 정규 표현식에 사용할 것인지 지정하지 않고 어떤 특수 문자를 이스케이프해야 하는지 추가로 지정하지 않고 "특수 문자를 이스케이프하는 데 사용할 수 있는 기능"을 요청하는 방식으로 작성되었습니다.
임의의 "특수 문자" 집합을 이스케이프하기 위해 각 문자를 이스케이프 변형으로 대체하는 사용자 지정 함수를 작성할 수 있습니다.이와 같은 것:
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\" :\
json 사용:
import json
print(r"""(I'm "stuck" :\)""") # (I'm "stuck" :\)
print(json.dumps(r"""(I'm "stuck" :\)""")) # (I'm "stuck" :\)
json이 이스케이프 문자로 문자열을 만드는 경우
json.dumps(json.dumps(d))
언급URL : https://stackoverflow.com/questions/4202538/escape-special-characters-in-a-python-string
'programing' 카테고리의 다른 글
밀도도를 만드는 방법 (0) | 2023.07.18 |
---|---|
SQL Server 2008 Express 데이터베이스에 모든 쿼리를 로깅하시겠습니까? (0) | 2023.07.18 |
문자열의 시작과 끝에 문자 삽입 (0) | 2023.07.18 |
파이프 제거 확인 메시지 무시 (0) | 2023.07.18 |
ASP.Net RadioButton 및 CheckBox가 스팬 내에서 렌더링되는 이유는 무엇입니까? (0) | 2023.07.13 |