自由文本中的可选正则表达式组

Optional regexp group in freetext

我有两种短信 - 两者的开头都有一个统一的消息代码,但可能还有第二个匹配项包含在 ' 字符中,如果存在的话我需要提取它。

M0123 示例“extratext”有两个预期的匹配项。

M0321 没有两个匹配项的例子

这匹配 #1 并捕获两个组但不匹配 #2:

^(?<code>M\d+).*(?<extra>'.*').*

这与 #1 和 #2 匹配,但从未捕获额外的组:

^(?<code>M\d+).*(?<extra>'.*')?.*

否定字符 类 应该能帮到你,比如

^(?<code>M\d+)[^']*(?:(?<extra>'.*').*)?

将第一个 .* 转换为 [^']* 将使它匹配第一个样本的第一个引号和第二个样本的整个字符串。

备注:

  • 如果在多行上下文中,您可能希望使用 [^'\r\n] 来避免重叠行
  • 如果总是有两个引号,你也可以使用(?<extra>'[^']*')