prosource

모듈의 정규식이 단어 경계(\b)를 지원합니까?

probook 2023. 7. 22. 10:11
반응형

모듈의 정규식이 단어 경계(\b)를 지원합니까?

정규 표현식에 대해 조금 더 배우려고 노력하는 동안, 튜토리얼은 당신이 다음을 사용할 수 있다고 제안했습니다.\b단어 경계와 일치합니다.그러나 Python 인터프리터의 다음 스니펫이 예상대로 작동하지 않습니다.

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

일치하는 항목이 있으면 일치 개체여야 하지만 일치하지 않습니다.None.

이것은\b식이 파이썬에서 지원되지 않거나 잘못 사용하고 있습니까?

코드에 원시 문자열을 사용해야 합니다.

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

또한, 당신은 왜 시도하지 않습니까?

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>

이렇게 하면 됩니다.re.search(r"\btwo\b", x)

당신이 글을 쓸 때"\b"파이썬에서는 단일 문자입니다."\x08"다음과 같이 백슬래시를 피합니다.

"\\b"

또는 다음과 같은 원시 문자열을 작성합니다.

r"\b"

그 이유를 분명히 설명하자면 re.search("\btwo\b", x)효과가 없어요, 왜냐하면\bPython 문자열은 백스페이스 문자의 줄임말입니다.

print("foo\bbar")
fobar

그래서 그 패턴은"\btwo\b"백스페이스를 찾고 있으며, 그 뒤를 따릅니다.two그 뒤에 다른 백스페이스가 있는데, 당신이 검색하는 문자열은 (x = 'one two three') 없습니다.

허용하기re.search(또는)compile) 시퀀스를 해석합니다.\b단어 경계로서, 백슬래시를 피하거나 ("\\btwo\\b"또는 원시 문자열을 사용하여 패턴을 만듭니다.r"\btwo\b").

파이썬 문서

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

\b

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

참고 사항입니다. 동적 변수의 경우 이 기능이 작동하지 않습니다.

x = 'one two three'
dy = "two"
y = re.search(r"\b" + dy + "\b", x)
print(y) # None

사용하다r"\b"좌우에

x = 'one two three'
dy = "two"
y = re.search(r"\b" + dy + r"\b", x)
print(y) # <re.Match object; span=(4, 7), match='two'>

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

반응형