鉴于正则表达式与结束不匹配

时间:2013-08-22 00:44:15

标签: python regex oniguruma

我有一个正则表达式:

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

它与name中的e和小组匹配name相匹配。

我希望不匹配name,但name name;比如我希望\S+工作直到匹配。我可以让它有点改变它:

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

但我希望可以缩短它。

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

/$myregex/g

例如,给出以下文字:

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

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

答案 2 :(得分:0)

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

您可以使用超前断言:

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

或者你可以使用交替:

((^|\s+)\S+){2}$