Python 정규식: 이스케이프 시퀀스에 \'r\' 접두사가 필수인가요?

Susan Sarandon
풀어 주다: 2024-10-19 17:03:31
원래의
297명이 탐색했습니다.

Python regex: Is the

Python 정규 표현식: 이스케이프 시퀀스에 대한 필수 "r" 접두사의 잘못된 믿음을 폭로하기

질문

첫 번째 예가 왜 없이 작동합니까? 이스케이프 시퀀스 앞에 "r" 접두사가 있습니까? 이스케이프 시퀀스를 처리할 때 필수여야 한다고 일반적으로 믿어집니다.

<code class="python"># example 1
import re
print(re.sub('\s+', ' ', 'hello     there      there'))
# prints 'hello there there' - not expected as r prefix is not used</code>
로그인 후 복사

답변

"r" 접두어를 권장하는 일반 규칙에도 불구하고 정규식 패턴에서 항상 필요한 것은 아닙니다. 사용하세요.

이스케이프 시퀀스에서 백슬래시()는 특수한 문자 시퀀스를 해석하거나 특별한 의미가 있는 문자를 이스케이프하는 표시 역할을 합니다. 그러나 백슬래시 앞에 오는 모든 시퀀스가 ​​유효한 이스케이프 시퀀스로 간주되는 것은 아닙니다.

이를 설명하려면 다음 예를 고려하세요.

  • 'n'은 개행 문자에 해당하는 이스케이프 시퀀스입니다. 문자입니다.
  • r'n'은 백슬래시가 리터럴 문자로 유지되는 원시 문자열 리터럴이며 'n'은 이스케이프 시퀀스로 해석되지 않습니다.

"r" 접두사가 이스케이프 시퀀스 앞에 없으면 Python은 인식된 이스케이프 시퀀스인 경우에만 이를 해석합니다. 즉, 's'와 같은 잘못된 이스케이프 시퀀스를 해석하려고 시도하지 않습니다.

이 동작은 제공된 첫 번째 예에서 관찰할 수 있습니다.

  • 's' is not 유효한 이스케이프 시퀀스입니다.
  • "r" 접두사가 없습니다.
  • 정규식 엔진은 s를 공백에 대한 이스케이프 시퀀스가 ​​아닌 리터럴 문자로 해석합니다.
  • 결과적으로 패턴은 하나 이상의 공백 문자와 일치하고 단일 공백으로 대체됩니다.

그러나 "r" 접두사가 사용되면 패턴 내의 모든 문자는 문자 그대로 해석됩니다. 즉, r's'는 문자 's' 다음에 오는 문자 그대로의 백슬래시 문자를 나타냅니다.

제한 사항 및 함정

"r" 접두사는 모든 이스케이프 시퀀스에 엄격히 필요하지는 않지만 일반적으로 특히 여러 이스케이프 시퀀스를 포함하는 복잡한 패턴으로 작업할 때 사용하는 것이 좋습니다. 이렇게 하면 혼란과 의도하지 않은 결과를 방지하는 데 도움이 됩니다.

위 내용은 Python 정규식: 이스케이프 시퀀스에 \'r\' 접두사가 필수인가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!