[問題] 關於regular expression的\b問題

作者: jamesxxx1997 (黃~)   2017-10-11 09:18:31
各位大大好,小弟想請教一個關於\b範例的問題
ex1.result=re.findall(r'\b[^aeiouAEIOU]\w+','AV is largest Analytics community of
India')
如果把\b給去掉,print(result)會得出一樣的結果
>>>print(result)
[' is', ' largest', ' Analytics', ' community', ' of', ' India']
想要請教一下,為甚麼呢,謝謝~~~
作者: djshen (djshen)   2017-10-11 09:31:00
說說看你對\b的了解
作者: vi000246 (Vi)   2017-10-11 10:09:00
這段regex想匹配什麼單字?
作者: ptt0720 (濕濕)   2017-10-11 11:13:00
b是邊界 , 不管有沒有邊界你都findall了 就會全部匹配
作者: jamesxxx1997 (黃~)   2017-10-11 13:10:00
我對於\b的概念是,\b就是word boundary而且\b 是屬於zero width assertion,不會占用任何字元,而word boundary 就是不屬於alphanumericcharcter,而且不是空白鍵,也不是底線照ptt0720大大的概念,我應該是對finall不太清楚這段regex想要匹配非母音開頭的單字喔正確的解法是\b[^aeiouAEIOU ],多一個空白鍵後來想了一下,是因為findall是逐字掃描而[^aeiouAEIOU]\w+也是碰碰word boundary而停止的所以\b才會有加跟沒加結果都一樣?
作者: stucode   2017-10-11 22:41:00
並不是 \b 放在開頭就只會 match 到單字開頭的邊界,這兩個 re 並不等價,在這個句子只是碰巧產生相同結果。把句子換成 'Apples on the tree' 或是 'My arm',就可以明白其中差異。
作者: s860134 (s860134)   2017-10-11 22:57:00
\b 是字元與非字元的邊界,少掉這個你的集合更大了你把例子的 AV 換成 MV, 這樣結果還是一樣嗎?上面例子不對應該是 AV -> AVV 這樣就不一樣了
作者: jamesxxx1997 (黃~)   2017-10-12 19:10:00
好的,謝謝s大解答~
作者: art1 (人,原來不是人)   2017-10-13 00:08:00
(?=\b[^aeiouAEIOU])\w+ 試出這樣可以選出來

Links booklink

Contact Us: admin [ a t ] ucptt.com