作者jamesxxx1997 (黃~)
看板Python
標題[問題] 關於regular expression的\b問題
時間Wed Oct 11 09:18:31 2017
各位大大好,小弟想請教一個關於\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://webptt.com/m.aspx?n=bbs/Python/M.1507684713.A.015.html
1F:→ djshen: 說說看你對\b的了解 10/11 09:31
2F:→ vi000246: 這段regex想匹配什麼單字? 10/11 10:09
3F:推 ptt0720: b是邊界 , 不管有沒有邊界你都findall了 就會全部匹配 10/11 11:13
4F:→ jamesxxx1997: 我對於\b的概念是,\b就是word boundary 10/11 13:10
5F:→ jamesxxx1997: 而且\b 是屬於zero width assertion,不會占用任何 10/11 13:11
6F:→ jamesxxx1997: 字元,而word boundary 就是不屬於alphanumeric 10/11 13:11
7F:→ jamesxxx1997: charcter,而且不是空白鍵,也不是底線 10/11 13:12
8F:→ jamesxxx1997: 照ptt0720大大的概念,我應該是對finall不太清楚 10/11 13:13
9F:→ jamesxxx1997: 這段regex想要匹配非母音開頭的單字喔 10/11 16:08
10F:→ jamesxxx1997: 正確的解法是\b[^aeiouAEIOU ],多一個空白鍵 10/11 16:10
11F:→ jamesxxx1997: 後來想了一下,是因為findall是逐字掃描 10/11 21:56
12F:→ jamesxxx1997: 而[^aeiouAEIOU]\w+也是碰碰word boundary而停止的 10/11 21:58
13F:→ jamesxxx1997: 所以\b才會有加跟沒加結果都一樣? 10/11 21:58
14F:→ stucode: 並不是 \b 放在開頭就只會 match 到單字開頭的邊界, 10/11 22:41
15F:→ stucode: 這兩個 re 並不等價,在這個句子只是碰巧產生相同結果。 10/11 22:42
16F:→ stucode: 把句子換成 'Apples on the tree' 或是 'My arm', 10/11 22:42
17F:→ stucode: 就可以明白其中差異。 10/11 22:42
18F:→ s860134: \b 是字元與非字元的邊界,少掉這個你的集合更大了 10/11 22:57
19F:→ s860134: 你把例子的 AV 換成 MV, 這樣結果還是一樣嗎? 10/11 22:58
20F:→ s860134: 上面例子不對應該是 AV -> AVV 這樣就不一樣了 10/11 23:03
21F:→ jamesxxx1997: 好的,謝謝s大解答~ 10/12 19:10
22F:推 art1: (?=\b[^aeiouAEIOU])\w+ 試出這樣可以選出來 10/13 00:08