[英]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.