2016-06-18 6 views
1

나는 대답을 찾기 위해 많은 질문을 읽었으며 내가 놓친다면 미안합니다.

새로운 줄 문자 만 포함하는 텍스트가 있다고 가정 해 보겠습니다. 정규 표현식은 파이썬과 같은 특별한 의미의 문자를 탈출 백 슬래시 문자 ('\')를 사용하기 때문에
text ='\n'
python 정규 표현식이 r 접두사없이 n을 이해하는 이유

, 우리는이 answer 제안처럼 날 문자열 표기법을 사용하여 새 라인 문자를 일치합니다. (제발 내가 틀렸다면 정정 해주세요.)

따라서 regex = re.compile(r'\n')을 입력하면 정규식 파서가 백 슬래시와 'n'문자를 읽고 새 줄 문자로 해석 할 수 있습니다.

내 질문에 regex = re.compile('\n')도 역시 작동합니까?

나는 regex.match(text)을 시도했는데 결과는 <_sre.SRE_Match object; span=(0, 1), match='\n'>이며 원시 문자열 표기법과 동일합니다.


here으로 작성된 문서 때문입니까? 이는 말한다 :

파이썬 문자열 리터럴에서 지원하는 표준 탈출의 대부분은 또한 정규 표현식 파서에 의해 허용됩니다 연구 \ T는 \의 V \ \ B를 \ f를 \ n을 \ \ X \\

누군가가 자세히 설명 할 수 있습니까? 감사.

+1

귀하의 질문은 2-in-1 답변이라고 생각합니다. regex 엔진은 실제 리터럴 뉴 라인을 검색 할 수 있습니다. –

+0

리터럴''\ n'' _에 의해 생성 된 문자열에는 백 슬래시가 포함되지 않습니다. 개행 문자가 포함되어 있습니다. 개행 문자에는 특별한 정규식 의미가 없습니다. – khelwood

+0

@ WiktorStribiżew 나는 그것이 어떻게 작동하는지 혼란 스럽다 .... 그래서 나는 더 자세한 설명을 기대하고있다. – Le0

답변

1

r'\n'은 문자열 리터럴의 해석을 억제합니다. 이 방법은 두 문자 '\''n'을 포함합니다. 두 문자는 일반 표현식 엔진에 의해 개행 시퀀스으로 해석됩니다. 두 번째 경우에 '\n'은 처음에 개행 순서 (Unix 기반 시스템에서는 LF, 즉 한 문자, 또는 Windows에서는 CR LF, 두 문자)로 변환됩니다. 정규 표현식 컴파일러는이를 명시 적으로 주어진 문자로 사용합니다 (백 슬래시가 없으며 특별한 해석이 없습니다).

+0

정규 표현식 컴파일러도 \ a \ b \ f \ r \ t \ v \ x \\를 사용할 수 있다는 것을 의미합니까? – Le0

+0

@ Le0 : 예, 이것은 같은 경우입니다. 기본적으로 특수 문자 (또는 일련의 특수 문자)를 표현하려고합니다. 소스 코드에 직접 작성할 수 있습니다.그러나 일부 문자는 편집기에서 보이지 않거나 프로그래밍 언어의 구문을 깨거나 (줄 바꿈과 같음) 소스 코드 파일에서 사용되는 인코딩으로 표현 될 수 없습니다. 이것은 이스케이프 시퀀스를 사용하는 이유입니다. 정규 표현식은 정규 표현식에만 사용되는 일부 특수 시퀀스에 백 슬래시도 필요합니다. 왜냐하면'r'raw 문자열 리터럴 '이 선호되기 때문입니다. – pepr