两个单词边界(\b)来分隔单个单词

2024-05-17 19:46:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图匹配出现在数字后面的单词——在下面的句子中,它是“米”这个词。你知道吗

The tower is 100 meters tall.

以下是我尝试的模式,但没有成功:

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

但这次是这样的:

\d+\s*(\w+)

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

The tower is 100 meters tall.

我不想和“高”这个词匹配。我预期会有以下行为:

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

问题是我对regex一窍不通,而且我是个十足的noob。我通过自己解决问题来练习——这就是其中之一。为什么比赛没有在第二次休息时停止?你知道吗


这是Python味的
Here's the regex101 test link of the above regex.


Tags: orofthenewismorematch模式
2条回答

它匹配两个单词是因为.匹配(几乎)所有字符,所以也匹配空格字符,而且+是贪婪的,所以它会尽可能多地匹配。如果您使用\w而不是.,它将起作用(因为\w只匹配单词字符-a-zA-Z_-9)。你知道吗

它没有停止,因为默认情况下+greedy,您需要+?作为非贪婪匹配。你知道吗

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

对于非贪婪匹配,您需要使用?跟随这些运算符,按照上面的顺序,它将是(*?)“零或多”或(+?)“一或多”-但最好是“尽可能少”。你知道吗

此外,单词边界\b与一侧是单词字符(字母、数字或下划线或python3中的unicode字母、数字或下划线)而另一侧不是单词字符的位置匹配。如果你不清楚边界之间是什么,我就不会在\b周围使用.。你知道吗

相关问题 更多 >