作者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/cn.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