查找字符串中的最后一个特定字符类型

时间:2016-08-25 16:29:15

标签: regex

我正在搜索一个像这样构造的字符串:

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:)的开头,从而避免使用第二个捕获组?

2 个答案:

答案 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

RegEx Demo

请注意,由于连字符+空格之前的延迟匹配.*,我们确保在最后一次出现连字符+空格之前匹配最长匹配。