我试图匹配出现在数字后面的单词——在下面的句子中,它是“米”这个词。你知道吗
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
\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
问题是我对regex一窍不通,而且我是个十足的noob。我通过自己解决问题来练习——这就是其中之一。为什么比赛没有在第二次休息时停止?你知道吗
它匹配两个单词是因为
.
匹配(几乎)所有字符,所以也匹配空格字符,而且+
是贪婪的,所以它会尽可能多地匹配。如果您使用\w
而不是.
,它将起作用(因为\w
只匹配单词字符-a-zA-Z_-9)。你知道吗它没有停止,因为默认情况下
+
是greedy,您需要+?
作为非贪婪匹配。你知道吗一个简洁的解释-
*
和+
是贪婪的量词/运算符,意味着它们将尽可能匹配,并且仍然允许正则表达式的其余部分匹配。你知道吗对于非贪婪匹配,您需要使用
?
跟随这些运算符,按照上面的顺序,它将是(*?
)“零或多”或(+?
)“一或多”-但最好是“尽可能少”。你知道吗此外,单词边界
\b
与一侧是单词字符(字母、数字或下划线或python3中的unicode字母、数字或下划线)而另一侧不是单词字符的位置匹配。如果你不清楚边界之间是什么,我就不会在\b
周围使用.
。你知道吗相关问题 更多 >
编程相关推荐