You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

下划线分隔5段字符串的各分段单独提取正则表达式需求

嘿,我来帮你搞定每个分段的精准正则匹配!针对AAA_BBB_CCC_DDD_EEE这种下划线分隔的结构,每个分段的专属正则我都整理好了,每一个都只会返回对应目标分段,不会多匹配其他内容:

各分段的专属正则:

  • 匹配第一个分段AAA
    ^[^_]+
    原理:从字符串开头开始,匹配所有非下划线字符,直到遇到第一个下划线就停止,正好精准命中AAA。

  • 匹配第二个分段BBB
    (?<=^[^_]+_)[^_]+(?=_)
    原理:用反向环视(?<=^[^_]+_)确保当前位置前面是「开头+第一个分段+下划线」,再用正向环视(?=_)确保后面跟着下划线,中间的非下划线字符就只能是BBB啦。你之前的(?<=[^_]*_)[^_]*(?=_)问题在于,[^_]*_是贪婪匹配,全局模式下会命中所有中间分段(BBB、CCC、DDD),加了^限定开头后,就只会锁定第二个分段了。

  • 匹配第三个分段CCC
    (?<=^[^_]+_[^_]+_)[^_]+(?=_)
    原理:和第二个分段的逻辑类似,反向环视里多叠加了一个「分段+下划线」,确保前面是前两个分段的完整结构,这样中间的就是CCC。

  • 匹配第四个分段DDD
    (?<=^[^_]+_[^_]+_[^_]+_)[^_]+(?=_)
    原理:继续叠加前序的分段结构,反向环视限定前面是前三个分段加下划线,精准锁定第四个分段DDD。

  • 匹配第五个分段EEE
    [^_]+$
    原理:从字符串末尾往前匹配所有非下划线字符,正好捕获最后一个分段EEE。

如果你的正则工具支持捕获组,其实也可以用^([^_]+)_([^_]+)_([^_]+)_([^_]+)_([^_]+)$,然后通过对应编号的捕获组提取每个分段,但如果必须每个正则单独返回目标内容,上面的写法就完全适用啦。

内容的提问来源于stack exchange,提问作者George Hernando

火山引擎 最新活动