我正在搜索一个像这样构造的字符串:
bla bla bla *Priorities: bla bla - yada yada - Keyword, yada *Terms
我可以像这样捕获关键字:
\*Priorities:.*?-.*?- (.*?),.*?\*Terms
但在某些情况下,或多或少有连字符:
bla bla bla *Priorities: bla bla - yada yada - bla bla - Keyword, yada *Terms
我也可以这样做:
\*Priorities:(.*?-){1,4} (.*?),.*?\*Terms
但我试图避免第二个捕获组(所以我不必修改我的代码)。无论如何以某种方式执行此操作,从模式匹配的末尾搜索到最后一个.?*-
?并且仍然在模式匹配中使用字符串(*Priorities:
)的开头,从而避免使用第二个捕获组?
答案 0 :(得分:1)
匹配1到4组非逗号,后跟逗号。然后是一个空格,后跟一个关键字,然后是结束序列。
\*Priorities:(?:[^-]+-){1,4} (\w+).*\*Terms
答案 1 :(得分:0)
您可以使用此正则表达式匹配两个输入字符串:
\*Priorities:.*- ([^,]*),.*?\*Terms
RegEx分手:
\*Priorities: # Match literal *Priorities:
.* # Match 0 or more any character (greedy match)
- # Match hyphen and space
([^,]*), # Match 0 or more of non-comma characters followed by a comma
.*? # Match 0 or more any character (lazy match)
\*Terms # Match literal *Terms
请注意,由于连字符+空格之前的延迟匹配.*
,我们确保在最后一次出现连字符+空格之前匹配最长匹配。