"Lazy"和"greedy"在正则表达式中是什么意思?

2024-04-19 05:54:40 发布

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


Tags: python
3条回答

贪婪的人会尽可能多地消费。从http://www.regular-expressions.info/repeat.html我们可以看到尝试将HTML标记与<.+>匹配的示例。假设您有以下内容:

<em>Hello World</em>

你可能认为<.+>.表示任何非换行字符,而+表示一个或多个)将只匹配<em></em>,而实际上它将非常贪婪,从第一个<到最后一个>。这意味着它将匹配<em>Hello World</em>,而不是您想要的。

使其变懒(<.+?>)将防止这种情况。通过在+之后添加?,我们告诉它尽可能地重复^{几次,所以它遇到的第一个>就是我们想要停止匹配的地方。

我鼓励您下载RegExr,这是一个很好的工具,可以帮助您探索正则表达式-我一直在使用它。

+-------------------+-----------------+------------------------------+
| Greedy quantifier | Lazy quantifier |        Description           |
+-------------------+-----------------+------------------------------+
| *                 | *?              | Star Quantifier: 0 or more   |
| +                 | +?              | Plus Quantifier: 1 or more   |
| ?                 | ??              | Optional Quantifier: 0 or 1  |
| {n}               | {n}?            | Quantifier: exactly n        |
| {n,}              | {n,}?           | Quantifier: n or more        |
| {n,m}             | {n,m}?          | Quantifier: between n and m  |
+-------------------+-----------------+------------------------------+

Add a ? to a quantifier to make it ungreedy i.e lazy.

示例:
测试字符串:stackoverflow
贪婪注册表表达式:^{}输出:stackoverflow
lazy reg表达式:^{}输出:stackoverflow

“贪心”意味着匹配最长的字符串。

“Lazy”表示匹配尽可能短的字符串。

例如,贪婪的h.+l匹配'hello'中的'hell',而懒惰的h.+?l匹配'hel'

相关问题 更多 >