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



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

M0123具有两个预期匹配项的示例">extratext"。

M0321没有两个匹配项的示例

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

^(?<code>Md+).*(?<extra>'.*').*

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

^(?<code>Md+).*(?<extra>'.*')?.*

否定字符类应该在这里帮助你,比如

^(?<code>Md+)[^']*(?:(?<extra>'.*').*)?

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

笔记:

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

最新更新