1

我有一个正则表达式:

^([ \t\r]*\S+){2}$

它匹配name和分组匹配e,在name.

我预计不会匹配name,但是name name;比如我想要\S+工作直到它匹配。我可以让它工作一点点改变它:

^([ \t\r]*\S+)([ \t\r]+\S+)$

但我希望可以缩短它。

4

3 回答 3

1

+, *, 和?不是所有格如果产生有效的匹配,它们将尽可能多地匹配,但如果没有,正则表达式引擎将回溯并尝试减少匹配。我不认为 Python 支持所有格量​​词。如果您不想匹配,则必须重新编码您的正则表达式name

于 2013-08-22T01:12:45.617 回答
0

使用您的原始表达式,^([ \t\r]*\S+){2}$na作为me不同的组分别匹配,因为您不强制(由于*in [ \t\r]*)在第一组之后使用空格字符。

您可以使用前瞻断言:

^([ \t\r]*\S+(?!\S)){2}$

或者您可以使用交替:

((^|\s+)\S+){2}$
于 2013-08-22T00:51:15.887 回答
0

您需要传递全局修饰符。我不确定您使用的是哪种编程语言,但语法通常类似于以下内容:

/$myregex/g

例如,给定以下文本:

你好亚当,你好吗?你好,莎拉,你好吗?

正则表达式/Hello\s(.*),/g将匹配AdamSarah

于 2013-08-22T00:47:50.720 回答