如何用正则表达式提取按指定分隔符拆分后的倒数第二个子字符串?
提取逗号分隔字符串中倒数第二个子字符串的正则表达式
核心正则表达式
如果需要直接匹配目标内容(无需捕获组):
(?<=^|,)[^,]+(?=,[^,]*$)
如果需要通过捕获组获取目标内容(兼容性更好,适配部分不支持环视的正则引擎):
^(?:.*,)?([^,]+)(?:,[^,]*)$
匹配验证
针对给出的示例字符串,正则均能精准匹配到matchX类内容:
- 字符串
a,b,match1,c→ 匹配结果:match1 - 字符串
a,match2,b→ 匹配结果:match2 - 字符串
match3,a→ 匹配结果:match3 - 字符串
match4,→ 匹配结果:match4 - 字符串
,,match5,a→ 匹配结果:match5 - 字符串
,,match6,→ 匹配结果:match6
正则逻辑说明
环视版本:
(?<=^|,):正向预查,确保目标内容前面是字符串开头或逗号[^,]+:匹配任意非逗号的字符序列(即单个子字符串)(?=,[^,]*$):正向预查,确保目标内容后面跟着一个逗号,以及任意数量的非逗号字符(或空)直到字符串结尾
捕获组版本:
^(?:.*,)?:匹配字符串开头到最后第二个逗号的部分(非捕获组,不保留匹配结果)([^,]+):捕获目标子字符串(倒数第二个)(?:,[^,]*)$:匹配最后一个逗号及之后的内容(非捕获组)
内容的提问来源于stack exchange,提问作者ZygD
相关产品推荐
相关产品推荐

