2016-10-10 336 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+字符尽可能多
  • $ - 字符串的结尾。