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