看板 Python 關於我們 聯絡資訊
各位大大好,小弟想請教一個關於\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'] 想要請教一下,為甚麼呢,謝謝~~~ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.83.192.197 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1507684713.A.015.html
djshen: 說說看你對\b的了解 10/11 09:31
vi000246: 這段regex想匹配什麼單字? 10/11 10:09
ptt0720: b是邊界 , 不管有沒有邊界你都findall了 就會全部匹配 10/11 11:13
jamesxxx1997: 我對於\b的概念是,\b就是word boundary 10/11 13:10
jamesxxx1997: 而且\b 是屬於zero width assertion,不會占用任何 10/11 13:11
jamesxxx1997: 字元,而word boundary 就是不屬於alphanumeric 10/11 13:11
jamesxxx1997: charcter,而且不是空白鍵,也不是底線 10/11 13:12
jamesxxx1997: 照ptt0720大大的概念,我應該是對finall不太清楚 10/11 13:13
jamesxxx1997: 這段regex想要匹配非母音開頭的單字喔 10/11 16:08
jamesxxx1997: 正確的解法是\b[^aeiouAEIOU ],多一個空白鍵 10/11 16:10
jamesxxx1997: 後來想了一下,是因為findall是逐字掃描 10/11 21:56
jamesxxx1997: 而[^aeiouAEIOU]\w+也是碰碰word boundary而停止的 10/11 21:58
jamesxxx1997: 所以\b才會有加跟沒加結果都一樣? 10/11 21:58
stucode: 並不是 \b 放在開頭就只會 match 到單字開頭的邊界, 10/11 22:41
stucode: 這兩個 re 並不等價,在這個句子只是碰巧產生相同結果。 10/11 22:42
stucode: 把句子換成 'Apples on the tree' 或是 'My arm', 10/11 22:42
stucode: 就可以明白其中差異。 10/11 22:42
s860134: \b 是字元與非字元的邊界,少掉這個你的集合更大了 10/11 22:57
s860134: 你把例子的 AV 換成 MV, 這樣結果還是一樣嗎? 10/11 22:58
s860134: 上面例子不對應該是 AV -> AVV 這樣就不一樣了 10/11 23:03
jamesxxx1997: 好的,謝謝s大解答~ 10/12 19:10
art1: (?=\b[^aeiouAEIOU])\w+ 試出這樣可以選出來 10/13 00:08