簡體   English   中英

下划線分隔字符串的RegEx

[英]RegEx of underscore delimited string

我有一個字符串,其中包含5個由下划線分隔的數據:

AAA_BBB_CCC_DDD_EEE

我想要每個組件一個不同的正則表達式。 正則表達式只需要返回一個組件。 例如,第一個僅返回AAA,第二個返回BBB,依此類推。

我可以使用以下內容解析AAA:

^([^_]*)?

我看到我可以像這樣環顧四周以找到:

(?<=[^_]*_).*
BBB_CCC_DDD_EEE

但是下面找不到僅僅BBB

(?<=[^_]*_)[^_]*(?=_)

向后混合和向前混合

^([^_]+)? // 1st
(?<=_)[^_]+ // 2nd
(?<=_)[^_]+(?=_[^_]+_[^_]+$) // 3rd
(?<=_)[^_]+(?=_[^_]+$) // 4th
[^_]+$ // 5th

只要知道“ _”之間的字符串長度,就可以像這樣

第一場比賽

 
 
 
  
  ^([^_]+)?
 
  

第二場比賽

 
 
 
  
  (?<=_)\\K[^_]+
 
  

第三場比賽

 
 
 
  
  (?<=_[A-Za-z]{3}_)\\K[^_]+
 
  

第四局

 
 
 
  
  (?<=_[A-Za-z]{3}_[A-Za-z]{3}_)\\K[^_]+
 
  

第五局

 
 
 
  
  (?<=_[A-Za-z]{3}_[A-Za-z]{3}_[A-Za-z]{3}_)\\K[^_]+
 
  

每個{3}表示“ _”之間字符串的長度

如果您的字符串始終使用下划線,則可以使用量詞(例如, {3}

這樣,您可以使用量詞指定要重復多少次之前再捕獲匹配項的次數。 對於示例字符串AAA_BBB_CCC_DDD_EEE您可以使用{0}{1}{2}{3}{4}

^(?:[^_\\n]+_){3}([0-9A-Za-z]+)(?:_[^_\\n]+)*$

那將匹配:

  • ^在行首處聲明位置
  • (?:[^_\\n]+_){3}在一個非捕獲組(?: ,將NOT和下划線或換行匹配一次或多次[^_\\n]+然后加上下划線並重復一次n次(在此示例中,n是3次)
  • ([0-9A-Za-z]+)使用字符類 (或使用[^_]+不匹配下划線,但也匹配任何空白字符)捕獲組中的字符
  • (?:_[^_\\n]+)*在捕獲值之后,在與下划線,NOT和下划線或換行符匹配的非捕獲組中重復一次或多次,並重復該模式零次或多次以獲取全場比賽
  • $在行尾聲明位置

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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