请教一个正则表达式分组捕获的问题

2015-12-09 14:07:50 +08:00
 haiyang416
示例文本 1 : all directions are: n, w, s and e.
目标结果 1 :{n, w, s, e}

示例文本 2 : all directions are: nw, sw, se, w, s and e.
目标结果 2 :{nw, sw, se, w, s, e}

只用一条正则表达式,是否可以捕获目标结果中的所有分组?
1601 次点击
所在节点    正则表达式
2 条回复
haiyang416
2015-12-09 14:58:03 +08:00
人工顶置一次。
SpicyCat
2015-12-09 16:07:33 +08:00
你没有说你用的什么语言。

假设你用 Python
(?:\s*(?::|,|and)\s*(?P<target>\w+))
这条正则产生了名为 target 的 named group

如果你用 Ruby
(?:\s*(?::|,|and)\s*(?<target>\w+))

如果你用 php ,那么上面两条都能用

如果你用 javascript ,因为 js 不支持 named capturing group ,所以只能用 numbered capturing group
(?:\s*(?::|,|and)\s*(\w+))

原理:每组以 : 或者 , 或者 and 开头,前后可能有空格(\s*),然后接一个或者多个英文字符(\w+), 这里的\w+就是我们要找的内容。
如果你的需求确定只会出现 nw, sw, se, w, s, e 这几种组合,那么也可以缩小匹配范围。

正则测试网站: https://regex101.com/#pcre
这是 Python, Javascript 和 php 的

http://rubular.com/
这是 Ruby 的

你可以自己测试修改正则。
其他语言可以自己修改,大同小异。

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

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

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

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

© 2021 V2EX