[问题] 关于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