IT

re 모듈의 정규식이 단어 경계 (\ b)를 지원하고?

lottoking 2020. 9. 7. 08:27
반응형

re 모듈의 정규식이 단어 경계 (\ b)를 지원하고?


정규식에 대해 조금 더 배우려고하는 동안 튜토리얼에서 \b사용하여 단어 경계를 일치 시키는 수 많은 제안했습니다 . 그러나 파이썬 인터프리터의 다음 스 니펫은 예상대로 작동하지 않습니다.

>>> x = 'one two three'
>>> y = re.search("\btwo\b", x)

일치하는 항목이 있으면 일치 개체에 맞춰서 None.

는 IS \b표현은 언어에서 지원되지 않거나 내가 잘못을 사용하고 있습니까?


시도해 보지 그래

word = 'two'
re.compile(r'\b%s\b' % word, re.I)

다수 :

>>> word = 'two'
>>> k = re.compile(r'\b%s\b' % word, re.I)
>>> x = 'one two three'
>>> y = k.search( x)
>>> y
<_sre.SRE_Match object at 0x100418850>

또한 언급 된 것을 잊었습니다. 코드에서 원시를 기억합니다.

>>> x = 'one two three'
>>> y = re.search(r"\btwo\b", x)
>>> y
<_sre.SRE_Match object at 0x100418a58>
>>> 

작동합니다. re.search(r"\btwo\b", x)

"\b"Python으로 전화 번호 단일 문자 "\x08"입니다 .. 다음과 같이 백 슬래시를 이스케이프.

"\\b"

또는 다음과 같이 원시를 작성하십시오.

r"\b"

작동하지 않는 이유 를 명시 적으로 설명 re.search("\btwo\b", x)하기 \b위해 Python에서 백 스페이스 문자의 속기 이기 때문 입니다.

print("foo\bbar")
fobar

패턴 따라서 "\btwo\b"은 백 스페이스를 찾고 two, 뒤에, 다른 백 스페이스가 뒤 따릅니다 x = 'one two three'. ( ) 에서 검색하는 것은 없습니다.

시퀀스 를 단어 경계로 해석 하도록 re.search(또는 compile) 허용하려면 \b백 슬래시 ( "\\btwo\\b")를 이스케이프 하거나 원시 문자열을 사용하여 패턴을 만듭니다 ( r"\btwo\b").


Python 문서

https://docs.python.org/2/library/re.html#regular-expression-syntax

\ 비

빈 문자열과 일치하지만 단어의 시작 또는 끝에서만 일치합니다. 단어는 일련의 영숫자 또는 밑줄 문자로 정의되므로 단어의 끝은 공백 또는 영숫자가 아닌 밑줄이 아닌 문자로 표시됩니다. 공식적으로 \ b는 \ w와 \ W 문자 사이 (또는 그 반대) 또는 \ w와 문자열의 시작 / 끝 사이의 경계로 정의되므로 영숫자로 간주되는 정확한 문자 집합은 UNICODE 및 LOCALE 플래그의 값. 예를 들어, r '\ bfoo \ b'는 'foo', 'foo.', '(foo)', 'bar foo baz'와 일치하지만 'foobar'또는 'foo3'과는 일치하지 않습니다. 문자 범위 내에서 \ b는 Python의 문자열 리터럴과의 호환성을 위해 백 스페이스 문자를 나타냅니다.

참고 URL : https://stackoverflow.com/questions/3995034/do-python-regular-expressions-from-the-re-module-support-word-boundaries-b

반응형