[英]Need help to construct regex
我正在尝试为以下各行找到一个正则表达式(请参阅文章底部的尝试)
CLog_DMT_HPCC2_IWHT91731695_242_AFT1_2019-05-02T07.51.43
正则表达式在此行上工作正常,上述行的结果是:
这是期望的结果
但是正则表达式不适用于此行
CLOB_ABCD_6KW_SYSTEM_609-784_IWHT91831863_197_ACB_01_2019-05-02T07.03.27
我想要以下行的结果
但我得到的是如下所示:
我已经尝试过以下行的正则表达式:
(?<programName>[a-zA-Z0-9]+)_(?<other>.+)_(?<boardSN>I.+)_(?<entityNameProgramVersion>.+)_(?<operation>.+)_
在您的模式中,您使用.+
,这是贪婪的,它将匹配到字符串的结尾。 然后它将回溯以完成其余模式。 在这种情况下,它将尝试回溯以适应以下所有下划线。
相反,您可以使用否定的字符类[^
而不是下划线或换行符来将匹配项限制为当前字符串,以防后面有多个。
other
您可能会使量词不贪心(?<other>.+?)
因此它放弃匹配,直到可以匹配_I
^(?<programName>[a-zA-Z0-9]+)_(?<other>.+?)_(?<boardSN>I[^_\n]+)_(?<entityNameProgramVersion>[^_\n]+)_(?<operation>[^\n_]+(?:_[^\n]+)?)_
说明
^
字符串开头 (?<programName>[a-zA-Z0-9]+)_
重复1次以上字符类中列出的内容 (?<other>.+?)_
匹配任何char 1次以上,除了非贪婪换行符 (?<boardSN>I[^_\\n]+)_
否定的字符类,不匹配_
或换行符 (?<entityNameProgramVersion>[^_\\n]+)_
否定的字符类,不匹配_
或换行符 (?<operation>[^\\n_]+(?:_[^\\n]+)?)_
否定的字符类,不将_
或换行符与可选组匹配,该可选组将匹配一个下划线并且不匹配下划线。 之后,在组外匹配一个下划线。 如果末尾的可选组只能是数字,则可以使用此部分而没有最后一个下划线:
(?<operation>[^\n_]+(?:_\d+)?)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.