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