我有一个正则表达式:
^([ \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。