我有两种短信 - 两者都在开头有一个统一的消息代码,但如果它在那里,可能会有第二个匹配项包含在 ' 字符中,我需要提取。
M0123具有两个预期匹配项的示例">extratext"。
M0321没有两个匹配项的示例
这匹配 #1 并捕获两个组,但不匹配 #2:
^(?<code>Md+).*(?<extra>'.*').*
这匹配#1和#2,但从未捕获额外的组:
^(?<code>Md+).*(?<extra>'.*')?.*
否定字符类应该在这里帮助你,比如
^(?<code>Md+)[^']*(?:(?<extra>'.*').*)?
将第一个.*
转换为[^']*
将使其与第一个样本的第一个引号和第二个样本的整个字符串匹配。
笔记:
- 如果在多行上下文中,您可能希望改用 [^'\r] 以避免重叠行
- 如果始终有两个引号,您也可以使用
(?<extra>'[^']*')