如何编写正则表达式分组提取三类不同格式的字符串?
解决方案
可以使用支持可选分组的正则表达式适配这三种文本格式,核心是把后面的[内容]部分设为可选匹配项。
正则表达式(保留方括号的版本)
^(.*?)(?: (\[.*?\]))?(?: (\[.*?\]))?$
正则说明
^和$:锁定整行的开头和结尾,避免匹配片段内容(.*?):捕获标题部分,非贪婪匹配到第一个空格加[或行尾(?: (\[.*?\]))?:非捕获组包裹的可选模块,匹配空格+带方括号的内容,模块后加?表示可出现0次或1次,内部的(\[.*?\])会捕获带方括号的完整内容- 第二个
(?: (\[.*?\]))?:同上,匹配第二个可选的带方括号内容
匹配结果
对三段文本分别匹配后,分组对应关系如下:
- 第一段文本:
- 分组1:
Simple test 1 - 分组2:
[https://www.test.com/aaa/bbb#rrr] - 分组3:
[1.111111, 0.222222]
- 分组1:
- 第二段文本:
- 分组1:
Simple test 2 - 分组2:
[https://www.test.com/aaa/bbb#rrr] - 分组3:空(无匹配内容)
- 分组1:
- 第三段文本:
- 分组1:
Simple test 3 - 分组2、3:空
- 分组1:
如果不需要保留方括号,可将正则调整为:
^(.*?)(?: \[(.*?)\])?(?: \[(.*?)\])?$
此时分组2会捕获链接本身,分组3捕获坐标本身。
内容的提问来源于stack exchange,提问作者Steph74
相关产品推荐
相关产品推荐

