Siv*_*man 3 regex regex-lookarounds
我有3列用空格分隔,但第二个字段可选地用双引号括起来.
我想提取第一个字段,第二个字段(双引号内的值)和第三个字段,有时第二个字段值可能不包含在双引号中,在这种情况下只返回现有值.
样本输入
1a "2a 2.1a 2.2a" 3a
4b "5.5b 5.6b 5.7b" 6b
7c 8c 9c
Run Code Online (Sandbox Code Playgroud)
最终输出
匹配信息是
第一行匹配
\1 1a
\2 2a 2.1a 2.2a
\3 3a
Run Code Online (Sandbox Code Playgroud)
第二排比赛
\1 4b
\2 5.5b 5.6b 5.7b
\3 6b
Run Code Online (Sandbox Code Playgroud)
第3排比赛
\1 7c
\2 8c
\3 9c
Run Code Online (Sandbox Code Playgroud)
我尝试了下面的正则表达式,它适用于前两个输入,但第三行不匹配,有人可以帮我解决这个问题吗?
我试过的正则表达式:
([a-z0-9]+)\s+"([a-z0-9\s.]+)"\s+([a-z0-9]+)
Run Code Online (Sandbox Code Playgroud)
链接:
您可以简单地在模式中选择引号.通过跟随前面的标记,?你告诉正则表达式引擎匹配前面的"零和一"时间.
([a-z0-9]+)\s+"?([a-z0-9\s.]+)"?\s+([a-z0-9]+)
Run Code Online (Sandbox Code Playgroud)
如果您的语言支持,您可以使用分支重置功能.通过使用此功能,备选方案中的两个捕获组都被视为一个捕获组.
([a-z0-9]+)\s+(?|"([^"]+)"|([a-z0-9]+))\s+([a-z0-9]+)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
777 次 |
| 最近记录: |