如何编写正则表达式匹配不同场景下字符X前后的指定内容
正则表达式优化解决方案
你当前使用的/[Xx]([\s\S]*)$/gm仅支持匹配X之后的全量内容,无法覆盖X前内容匹配、X前冗余空格/L字符过滤的需求,可按你的匹配目标选择以下优化后的正则:
场景1:匹配X之前的数值(适配需求2、3)
使用正则:/([\d.]+)\s*(?:L\s*)?(?=[xX])/gm
匹配规则说明:
- 核心捕获组
([\d.]+)只提取数字、小数点组成的有效数值 \s*(?:L\s*)?是非捕获组,自动跳过数值到X之间可能存在的空格、可选的L字符,不会将这部分内容计入匹配结果(?=[xX])是正向预查,仅匹配紧邻X/x前的内容,不会误匹配其他位置的数值
测试效果:- 输入
25.250755 X 6.62,匹配结果为25.250755 - 输入
25.250755 L X 6.62,匹配结果为25.250755 - 输入
25.250755L X 6.62,匹配结果为25.250755
场景2:匹配X之后的内容(适配需求1)
如果需要获取X之后的完整内容,使用正则:/(?<=[xX])\s*(.*)$/gm
如果仅需要获取X之后的数值部分,使用正则:/(?<=[xX])\s*([\d.]+)/gm
匹配规则说明:
(?<=[xX])是反向预查,仅匹配紧邻X/x之后的内容,不会匹配到X本身- 开头的
\s*自动跳过X后的前置空格
测试效果: - 输入
6.62 X 25.250755 L,完整内容匹配结果为25.250755 L,数值匹配结果为25.250755
场景3:单次匹配同时获取X两侧的内容
使用正则:/([\d.]+)\s*(?:L\s*)?[xX]\s*(.*)/gm
匹配结果中分组1为X前的数值,分组2为X后的完整内容,按需提取即可。
内容的提问来源于stack exchange,提问作者melokki
相关产品推荐
相关产品推荐

