簡體   English   中英

需要幫助來構建正則表達式

[英]Need help to construct regex

我正在嘗試為以下各行找到一個正則表達式(請參閱文章底部的嘗試)

CLog_DMT_HPCC2_IWHT91731695_242_AFT1_2019-05-02T07.51.43

正則表達式在此行上工作正常,上述行的結果是:

  • programName = CLog
  • otherRegex = DMT_HPCC2
  • SerialNO = IWHT91731695(注意:序列號始終從“ I”開始)
  • 版本= 242
  • 操作= AFT1

這是期望的結果

但是正則表達式不適用於此行

CLOB_ABCD_6KW_SYSTEM_609-784_IWHT91831863_197_ACB_01_2019-05-02T07.03.27

我想要以下行的結果

  • 程式名稱= CLOB
  • otherRegex = ABCD_6KW_SYSTEM_609-784
  • 序列號= IWHT91831863
  • 版本= 197
  • 操作= ACB_01

但我得到的是如下所示:

  • 程式名稱= CLOB
  • otherRegex = ABCD_6KW_SYSTEM_609-784
  • 序列號= IWHT91831863 _197
  • 版本= ACB
  • 操作= 01

我已經嘗試過以下行的正則表達式:

(?<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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM