从右向左正则表达式提取数据:双元素场景匹配错误求解决
解决从右向左提取数据的正则匹配问题
你的问题出在正则的可选组匹配顺序上——默认左到右的匹配逻辑会让左边的three组优先捕获内容,导致两个元素的场景下错误赋值。不用反转工具的话,可以用分支式正则分别匹配不同元素数量的情况,确保每个位置的捕获组名称对应正确:
修正后的正则表达式
^(?<three>\d+),(?<two>\d+),(?<one>\d+)$|^(?<two>\d+),(?<one>\d+)$|^(?<one>\d+)$
匹配逻辑说明
- 第一个分支
^(?<three>\d+),(?<two>\d+),(?<one>\d+)$:匹配三个元素的行,three捕获最左侧数字,two捕获中间,one捕获最右侧 - 第二个分支
^(?<two>\d+),(?<one>\d+)$:匹配两个元素的行,two捕获左侧数字,one捕获右侧 - 第三个分支
^(?<one>\d+)$:匹配单个元素的行,仅捕获one
替换规则(以支持命名组的工具为例)
替换字符串写为:
One=${one}${two:+ Two=${two}}${three:+ Three=${three}}
这样会自动根据捕获组是否存在来拼接内容,最终输出符合你的期望:
One=34 Two=4 Three=1 One=15 Two=5 One=22
内容的提问来源于stack exchange,提问作者Jotne
相关产品推荐
相关产品推荐

