r'[a-zA-Z]+(\'[a-zA-Z]+|\b)' 有这么一条正则表达式匹配单词个数,最后那个‘|’理解不了。 哪位可以帮忙解释下

2015-09-16 15:43:26 +08:00
 muzzy
3905 次点击
所在节点    Python
14 条回复
xjx0524
2015-09-16 16:19:02 +08:00
\b 匹配单词边界
| 表示括号里两种情况是 或 的关系

比如 I 和 I'm
caixiexin
2015-09-16 16:47:37 +08:00
匹配的应该是类似
aBc
aBc
这两种情况,第二个末尾比第一个多一个空格
imn1
2015-09-16 17:16:17 +08:00
it is 'new year'
it's 'new year'
muzzy
2015-09-16 17:42:22 +08:00
@xjx0524 表示括号里面的两个是或关系的话,一句话的结尾用.结束,那最后一个单词是怎么匹配到的呢。[a-zA-Z]这个与(\'[a-zA-Z]+|\b ) 也是或的关系?
staticor
2015-09-16 17:50:07 +08:00
@muzzy 只用考虑一个单词的结尾之后跟的是 单引号 或非单引号(即 ' & \b )
rock_cloud
2015-09-16 17:51:56 +08:00
给楼主推荐一个网站 https://regex101.com/
虽然是机器解释的,不过还可以看
jadecoder
2015-09-16 18:07:23 +08:00
匹配 单引号+字母 或者 单词边界
theFool
2015-09-16 18:08:38 +08:00
跟楼上顺路贴一个
http://regexper.com/
不过是 js 的。
Biwood
2015-09-16 18:40:40 +08:00
① [a-zA-Z]+: 匹配所有大小写字母

② [a-zA-Z]+(\b ):在①的所有匹配结果中匹配一个单词边界

③ [a-zA-Z]+(\'[a-zA-Z]+|\b ):由于 \b 会把 "it's" 这种情况当成两个单词,所有优先使用 \'[a-zA-Z]+ 进行匹配,若匹配失败,再使用 \b 进行匹配
Biwood
2015-09-16 18:43:17 +08:00
接楼上,①应该是匹配连续的、一个或一个以上的大小写字母,所有 "it's" 被分成了两个
xjx0524
2015-09-16 20:32:15 +08:00
@muzzy 你这个可以看成 ①(②|③) 的形式,匹配 ①②(单词加单词边界)或者 ①③(单词加'加单词)

你说的句尾有.的情况,应该是 ①② 这种形式,句点不会匹配进去
xjx0524
2015-09-16 20:32:57 +08:00
@xjx0524 抱歉说反了 应该是 ①②(单词加'加单词)或者 ①③(单词加单词边界)
ljbha007
2015-09-16 20:35:35 +08:00
表示 小组内的或关系
Biwood
2015-09-17 10:28:00 +08:00
抱歉的跟楼主说一声,我在 9 楼和 10 楼的分析是错误的。

[a-zA-Z]+(\'[a-zA-Z]+|\b ) 这个表达式可以用算术里的乘法分配律理解,相当于匹配 [a-zA-Z]+\'[a-zA-Z]+ 或 [a-zA-Z]+\b 这两种情况,是我想复杂了, sorry ,@xjx0524 的说法是正确的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/221163

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX