正则表达式可能包含或不包含

时间:2016-10-10 11:04:50

标签: regex

我有多个要解析的字符串。该文本可以是多行的,也可以不是。 此外,某些部分可能不存在。我有一些样本来了解我的需要。

样品;
1-singleline)00026A123456123456789012741852
2-multiline)00030A789ABC210987654321258369X123

X是单独的组 我尝试使用这个正则表达式:(?<group1>.*)(?:[X](?<group2>.*))

1 个答案:

答案 0 :(得分:1)

如果只有1个X分隔这些组,或者它是第一个始终将这些组分开的X,则可以使用

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

请参阅regex demo

第一组模式应为惰性点.*?,第二组模式应包含可选的非捕获组(?:....)?

当文本没有X...时,第二个捕获组被视为非参与,因此 null 为空(取决于您使用正则表达式的位置)。

<强>详情:

  • ^ - 字符串开头
  • (?<group1>.*?) - 任意0个字符(或排除换行符号,取决于正则表达式引擎)尽可能少到第一个
  • (?:X(?<group2>.*))? - X的可选序列,后跟任意多个字符,最多
  • $ - 字符串的结尾。