正则表达式:下划线之间的匹配

时间:2020-07-28 12:52:55

标签: regex regex-group

例如,我有一个字符串111352_01_2_SAMPLE_TEXT_SAMPLE。我需要匹配第一个,第二个,第三个数字和其余文本。

目前我有这个:

  • 第一个数字:^[^_]+(?=_)(直到1.下划线的所有数字)
  • 第二个数字:(?<=_)[^_]*(?=_)(介于1.和2.下划线之间的所有数字)
  • 剩余文字:(?:.*?_){3}(.*)\s*(下划线出现第三次后的文字)

有没有更多的“可读的”方式来表达,因为前三个匹配的逻辑非常相似。 编写匹配所有内容的表达式的最佳方式是什么

2 个答案:

答案 0 :(得分:0)

自从您标记了regex-group以来,我认为检索这三个子字符串的更直接的方法可能是:

^(.*?)_(.*?)_.*?_(.*)$

请参见demo


也许您正在寻找一个适用于所需字符串中任意元素的正则表达式表达式。在这种情况下,您可以使用:

^(?:.*?_){0}([^\n_]+)

这是检索元素的零索引类型,其下划线分隔。但是,我没有看到常规的split()函数带来的好处。将零更改为1、2或3等。

答案 1 :(得分:0)

只需使用

^(\d+)_(\d+)_(\d+)_(.+)

请参见a demo on regex101.com