自由文本中的可选正则表达式组
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>'[^']*')
我有两种短信 - 两者的开头都有一个统一的消息代码,但可能还有第二个匹配项包含在 ' 字符中,如果存在的话我需要提取它。
M0123 示例“extratext”有两个预期的匹配项。
M0321 没有两个匹配项的例子
这匹配 #1 并捕获两个组但不匹配 #2:
^(?<code>M\d+).*(?<extra>'.*').*
这与 #1 和 #2 匹配,但从未捕获额外的组:
^(?<code>M\d+).*(?<extra>'.*')?.*
否定字符 类 应该能帮到你,比如
^(?<code>M\d+)[^']*(?:(?<extra>'.*').*)?
将第一个 .*
转换为 [^']*
将使它匹配第一个样本的第一个引号和第二个样本的整个字符串。
备注:
- 如果在多行上下文中,您可能希望使用 [^'\r\n] 来避免重叠行
- 如果总是有两个引号,你也可以使用
(?<extra>'[^']*')