两个字边界(\ b)隔离单个单词

Ren*_*der 2 python regex

我试图匹配一个数字后面出现的单词 - 在下面的句子中,它是单词"米".

塔高100 .

这是我尝试的模式不起作用:

\d+\s*(\b.+\b)

但是这个做了:

\d+\s*(\w+)

第一个不正确的模式与此匹配:

100 .

我不想要"高"这个词匹配.我期望以下行为:

\d+ match one or more occurrence of a digit
\s* match any or no spaces
( start new capturing group
\b find the word/non-word boundary
.+ match 1 or more of everything except new line
\b find the next word/non-word boundary
) stop capturing group

问题是我不知道关于正则表达式的问题,而且我非常喜欢菜鸟.我正在练习制造自己的问题并试图解决它们 - 这是其中之一.为什么比赛在第二次休息时没有停止(\b)


这是Python风格
这里是上述正则表达式的regex101测试链接.

hwn*_*wnd 8

它没有停止,因为默认+贪婪,你想要+?一个非贪婪的比赛.

一个简洁的解释 - *并且+是贪婪的量词/运算符意味着它们将尽可能多地匹配并且仍然允许正则表达式的其余部分匹配.

你需要跟随这些运算符?进行非贪婪的匹配,按照上面的顺序,它将是(*?)"零或更多"或(+?)"一个或多个" - 但最好是"尽可能少".

字边界也\b匹配一边是单词字符(字母,数字或下划线或Python 3中的unicode字母,数字或下划线)而另一边不是单词字符的位置.我不会用\b周围.,如果您不确定之间的界限是什么在不在.