我有一个正则表达式:
^([ \t\r]*\S+){2}$
它匹配name
和分组匹配e
,在name
.
我预计不会匹配name
,但是name name
;比如我想要\S+
工作直到它匹配。我可以让它工作一点点改变它:
^([ \t\r]*\S+)([ \t\r]+\S+)$
但我希望可以缩短它。
+
, *
, 和?
不是所有格。如果产生有效的匹配,它们将尽可能多地匹配,但如果没有,正则表达式引擎将回溯并尝试减少匹配。我不认为 Python 支持所有格量词。如果您不想匹配,则必须重新编码您的正则表达式name
。
使用您的原始表达式,^([ \t\r]*\S+){2}$
和na
作为me
不同的组分别匹配,因为您不强制(由于*
in [ \t\r]*
)在第一组之后使用空格字符。
您可以使用前瞻断言:
^([ \t\r]*\S+(?!\S)){2}$
或者您可以使用交替:
((^|\s+)\S+){2}$
您需要传递全局修饰符。我不确定您使用的是哪种编程语言,但语法通常类似于以下内容:
/$myregex/g
例如,给定以下文本:
你好亚当,你好吗?你好,莎拉,你好吗?
正则表达式/Hello\s(.*),/g
将匹配Adam和Sarah。