正则表达式:下划线之间的匹配
Regex: matching between underscores
比如我有一个字符串111352_01_2_SAMPLE_TEXT_SAMPLE
。我需要匹配第一个、第二个、第三个数字和剩余的文本。
目前我有这个:
- 第一个数字:
^[^_]+(?=_)
(1.下划线之前的所有内容)
- 第二个数字:
(?<=_)[^_]*(?=_)
(1. 和 2. 下划线之间的所有内容)
- 剩余文本:
(?:.*?_){3}(.*)\s*
(下划线第三次出现后的文本)
是否有更“可读”的构建表达式的方式,因为前三个匹配的逻辑非常相似。
什么是匹配所有表达式的最佳写法
因为你标记了 regex-group
我认为检索这三个子字符串的更直接的方法可能是:
^(.*?)_(.*?)_.*?_(.*)$
见demo
也许您正在寻找适用于您想要的字符串中的任何元素的单个正则表达式。在这种情况下,您可以使用:
^(?:.*?_){0}([^\n_]+)
这是一种零索引类型的检索元素,由下划线分隔。但是,我看不到常规 split()
函数的好处。将零更改为 1、2 或 3 等
只需使用
^(\d+)_(\d+)_(\d+)_(.+)
比如我有一个字符串111352_01_2_SAMPLE_TEXT_SAMPLE
。我需要匹配第一个、第二个、第三个数字和剩余的文本。
目前我有这个:
- 第一个数字:
^[^_]+(?=_)
(1.下划线之前的所有内容) - 第二个数字:
(?<=_)[^_]*(?=_)
(1. 和 2. 下划线之间的所有内容) - 剩余文本:
(?:.*?_){3}(.*)\s*
(下划线第三次出现后的文本)
是否有更“可读”的构建表达式的方式,因为前三个匹配的逻辑非常相似。 什么是匹配所有表达式的最佳写法
因为你标记了 regex-group
我认为检索这三个子字符串的更直接的方法可能是:
^(.*?)_(.*?)_.*?_(.*)$
见demo
也许您正在寻找适用于您想要的字符串中的任何元素的单个正则表达式。在这种情况下,您可以使用:
^(?:.*?_){0}([^\n_]+)
这是一种零索引类型的检索元素,由下划线分隔。但是,我看不到常规 split()
函数的好处。将零更改为 1、2 或 3 等
只需使用
^(\d+)_(\d+)_(\d+)_(.+)