python - 활용 - 파이썬 정규표현식 한글




문자열 언 이스케이프를 구현하는 Python 정규 표현식 (4)

결과 문자열에 대한 파이썬의 표현에 속았다. 파이썬 표현식 :

'This is \\n a test \\r'

문자열을 나타냅니다.

This is \n a test \r

네가 원하는 걸 생각해. 각각의 p.sub () 호출 앞에 'print'를 추가하여 문자열의 파이썬 표현 대신에 반환 된 실제 문자열을 출력하십시오.

>>> mystring = r"This is \n a test \r"
>>> mystring
'This is \\n a test \\r'
>>> print mystring
This is \n a test \r

나는 파이썬 정규 표현식과 역 참조를 사용하여 문자열 언 이스케이프를 구현하려고 시도하고 있으며 매우 잘 작동하고 싶지는 않습니다. 나는 그것이 내가 잘못하고있는 것이라고 확신하지만, 나는 무엇을 알아낼 수 없다 ...

>>> import re
>>> mystring = r"This is \n a test \r"
>>> p = re.compile( "\\\\(\\S)" )
>>> p.sub( "\\1", mystring )
'This is n a test r'
>>> p.sub( "\\\\\\1", mystring )
'This is \\n a test \\r'
>>> p.sub( "\\\\1", mystring )
'This is \\1 a test \\1'

\\ [char]을 \ [char]로 대체하고 싶지만, 파이썬의 역 참조는 지금까지 사용했던 다른 모든 구현에서와 동일한 규칙을 따르지 않는 것으로 보입니다. 누군가가 좀 밝힐 수 있을까요?


그게 앤더스의 두 번째 모범이하는 것이 아닙니까?

2.5에서는 string-escape 인코딩을 적용 할 수 있습니다.

>>> mystring = r"This is \n a test \r"
>>> mystring.decode('string-escape')
'This is \n a test \r'
>>> print mystring.decode('string-escape')
This is 
 a test 
>>> 

아이디어는 이스케이프 된 문자열을 읽고 이스케이프 처리하지 않을 것입니다 (처음에는 정규 표현식을 사용하지 않아도되는 Python이 부족한 기능 임). 불행히도 나는 역 슬래시에 속지 않는다.

다른 예시적인 예 :

>>> mystring = r"This is \n ridiculous"
>>> print mystring
This is \n ridiculous
>>> p = re.compile( r"\\(\S)" )
>>> print p.sub( 'bloody', mystring )
This is bloody ridiculous
>>> print p.sub( r'\1', mystring )
This is n ridiculous
>>> print p.sub( r'\\1', mystring )
This is \1 ridiculous
>>> print p.sub( r'\\\1', mystring )
This is \n ridiculous

내가 인쇄하기를 원하는 것은

This is 
ridiculous

표; 두 번째 예제에서는 이스케이프 시퀀스가 ​​배열에없는 경우 초기에 배열로 던져진 모든 이스케이프 된 문자를 필요로합니다. 그것은 세 가지 문자가 제공되지만 (죽기 \ va 시도), 문자열을 이스케이프 (또는 전역 배열 유지) 할 때마다 가능한 모든 이스케이프 시퀀스를 열거하는 것은 정말 나쁜 해결책입니다. PHP와 비슷하게 preg_replace_callback()preg_replace_callback() 대신 lambda와 함께 사용 preg_replace_callback() .이 상황에서는 전혀 필요하지 않습니다.

그것에 대해 거시기에서 벗어나면 유감스럽게 생각합니다. 파이썬으로 완전히 좌절했습니다. 이것은 제가 사용 해본 모든 정규 표현식 엔진에서 지원됩니다. 왜 이것이 작동하지 않는지 이해할 수 없습니다.

응답 해 주셔서 감사합니다. string.decode('string-escape') 함수는 정확하게 내가 처음에 찾고 있던 함수입니다. 누군가가 정규식 역 참조 문제에 대한 일반적인 해결책을 가지고 있다면, 그것을 게시하고 나는 대답으로 그것을 받아 들일 것입니다.





backreference