2017-09-18 2 views
1

나는 다음과 같은 작은 Python 스크립트가 있습니다. 하지만 정규식을 약간 조정하고 마지막을 제거하면. 다음과 같이 작동합니다 :내 단어 경계 정규식에 무슨 문제가 있습니까? 그것은 일치하지 않는 것</p> <pre><code>import re def main(): thename = "DAVID M. D.D.S." theregex = re.compile(r"bD.D.S.b") if re.search(theregex, thename): print ("you did it") main() </code></pre> <p>:

\bD\.D\.S\b 

나는 정규 표현식을 이해하는 데 꽤 능숙하다고 느끼지만, 이것은 당황 스럽습니다. \ b (단어 경계)에 대한 나의 이해는 영숫자가 아닌 (그리고 밑줄) 영 (0) 너비 일치이어야합니다.

D.D.S. 

내가 무엇을 놓치고 : 그래서

"\bD\.D\.S\.\b" 

일치 기대?

+1

후 비 단어에 대한 검사'R '와 함께 탈출을 두 번 피 \ bD \ .D \ .S \. \ b;'하지만 점은 비 단어 문자이므로'\ b' (단어 경계)는 점 뒤에 매치 될 수 없습니다. – anubhava

+0

단어 문자 옆에 \ b 만 사용할 수 있다는 의미입니까? 그래서 내가 "하이퍼!" 나는 정규 표현식을 가질 수 없다 "hyper! \ b" – sniperd

+1

단어가 이미'!'에서 끝났기 때문에 그렇다. '\ b'는'하이퍼 (hyper) '와'!'사이의 위치를 ​​선언하는 데 사용할 수 있습니다. – anubhava

답변

1

이렇게 생각하지 못할 수도 있습니다.

D.D.S. # no match, as there is no word boundary after the final dot 
D.D.S.S # matches since there is a word boundary between `.` and `S` at the end 

단어 경계가 [0-9A-Za-z_]과 기타 "문자"입니다 단어 문자 (\w 사이의 폭 제로 정합 기이기 때문에 : 여기

r"\bD\.D\.S\.\b" 

은 다음과 같습니다 같은 예와 더불어, explanation of that regex입니다 사용자의 로켈에 의해 정의 된) 및 단어가 아닌 문자 (이전 클래스의 반전 인 \W)가 있습니다. 도트 ( .)는 단어 문자가 아니므로   D.D.S.   (후행 공백에주의하십시오)에 다음 단어가 포함되어 있습니다 :   \bD\b.\bD\b.\bS\b.   (단어 경계를 보여주기 때문에 도트를 이스케이프하지 않았습니다. 정규식을 작성하지 않음).

줄 끝이나 공백과 일치하는 것으로 가정합니다. 그렇게하는 방법은 두 가지가 있습니다 : 나는 explain the negation example above에 위의 정규식 설명 링크 (…/2에서 두 번째로 끝이 동안 …/1에서 처음으로 끝을 유의 정제 한

r"\bD\.D\.S\.(?!\S)" # by negation: do not match a non-whitespace 
r"\bD\.D\.S\.(?:\s|$)" # match either a whitespace character or end of line 

, 더이 실험 주시기은, 그것은 좋은 대화 형).

+0

자세한 내용을 작성해 주셔서 감사합니다. 내가 정규식을 가지고 있다고 생각할 때마다 나는 다음과 같이 우연히 만난다. – sniperd

+0

"단어 경계는 단어 문자 사이의 제로 폭 계산자이다."이것은 결코 의미가 없음을 의미합니까? "! \ b!"\ b의 어느 쪽이 단어 문자가 아니기 때문에? – sniperd

+1

'\ b'는 너비가 0 인 정규 표현식이므로 'D'와'의 경계와 일치합니다. ''D'에서 어떤 너비도 사용하지 않아도됩니다. 맞습니다. 두 개의 느낌표 사이에 단어 경계가 없기 때문에 정규 표현식'! \ b!'이 실패 할 수 있습니다. –

0
  • \.\b 일치 .bla - 단어 문자를 검사 .
  • \.\B 반대 일치 bla.하지만 bla.bla 후 - .
\bD\.D\.S\.\B
+0

이것은 또한'DDS '와 일치 할 것이고, 나는 그것이 원했다는 것을 확신하지 못한다. –

관련 문제