정규식에 대해 조금 더 배우려고하는 동안 튜토리얼에서 \b
를 사용하여 단어 경계를 일치 시킬 수 있다고 제안했습니다 . 그러나 Python 인터프리터의 다음 스 니펫은 예상대로 작동하지 않습니다.
>>> 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는 파이썬의 문자열 리터럴과의 호환성을 위해 백 스페이스 문자를 나타냅니다.