如何编写正则表达式提取下划线分隔字符串的三个分组内容
下划线分隔三段字符串的正则提取方案
待处理字符串为单行文本,固定以_作为分隔符拆分为3段,格式为xxxxxx_yyyyyyy_zzzzzz,需要分别提取三段随机内容。
你当前使用的正则^[^_]*仅能匹配第一段的原因很简单:该规则从字符串起始位置开始匹配,命中第一个_时就会终止匹配,自然无法覆盖后续两段内容。
一次性提取全部三段(推荐写法)
使用带捕获组的正则单次匹配即可拿到全部三段内容,规则如下:
^([^_]+)_([^_]+)_([^_]+)$
各捕获组对应匹配内容:
- 第1组:匹配起始位置到第一个
_之间的内容,即第一段x段 - 第2组:匹配两个
_中间的内容,即第二段y段 - 第3组:匹配第二个
_到字符串末尾的内容,即第三段z段
如果允许某一段内容为空,把规则里的+替换为*即可,对应写法为^([^_]*)_([^_]*)_([^_]*)$
单独匹配某一段的正则写法
如果需要为每一段单独写匹配规则,可以直接用以下对应写法:
- 匹配第一段:
^[^_]+(即你当前正在使用的写法) - 匹配第二段:
(?<=_)[^_]+(?=_),通过前后断言锁定夹在两个_中间的内容 - 匹配第三段:
[^_]+$,从字符串末尾反向匹配到第一个_前的内容
匹配示例
以测试字符串user_001_profile为例:
全量匹配捕获结果:
第一段:user
第二段:001
第三段:profile
单段正则分别匹配的结果和上述结果完全一致。
内容的提问来源于stack exchange,提问作者Kans0c1ty
相关产品推荐
相关产品推荐

