2016-10-10 337 views
1

我有多個要解析的字符串。這段文字可以是多行或不行。 此外,某些部分可能不存在。我有一些樣本來了解我需要什麼。正則表達式可能包含一個組或不包含

樣品;
1-單線)00026A123456123456789012741852
2-多行)00030A789ABC210987654321258369X123

X是獨立的基團。
我嘗試使用這個表達式:(?<group1>.*)(?:[X](?<group2>.*))

+0

嘗試['^(?。*?)(?:X(?。*))?$'](https://regex101.com/r/hpScrj/2)。 * last *'X'是否將組或第一個組分開?或者只有1個'X'? –

+0

謝謝,但沒有爲第一個工作。第一個沒有第二組。我的演示https://regex101.com/r/BJdSUb/1 –

+0

你是什麼意思的「沒有第二組」?它是空的。你如何使用正則表達式?不要相信您在regex101上看到的內容,但不會顯示非參與羣體。這是regex101錯誤。 –

回答

1

如果只能有1 X分離羣體,或者是第一次X總是分開組,你可以使用

^(?<group1>.*?)(?:X(?<group2>.*))?$ 

regex demo

第一組模式應該是一個懶點.*?,第二個模式應該包含一個可選的非捕獲組(?:....)?

當文本沒有X...,第二個捕獲組被認爲是非參與,因此是任一(取決於使用正則表達式)。

詳細

  • ^ - 串
  • 開始
  • (?<group1>.*?) - 任何0+字符(或排除斷行的符號,這取決於正則表達式引擎),儘可能少到第一
  • (?:X(?<group2>.*))? - 可選序列X後跟任意0+字符儘可能多
  • $ - 字符串的結尾。