Python中的正则表达式无法正确匹配

悉达思

我正在尝试使用Python中的正则表达式从字符串中提取数据。

字符串是“您的第一笔订单优惠15%”。我想从该字符串中提取15。为此,我正在-

import re
pattern = r'.*(\d+)\s*\%.*off.*'
string = '15% Off your first order'
m = re.match(pattern, string, re.I)
print m.group(1)

但是,这返回5而不是15我想念什么?

四人

实际的问题在这里

.*(\d+)

.*贪婪。因此实际匹配是这样发生的。

r'.*(\d+)\s*\%.*off.*'

.*首先匹配整个字符串,因为它是贪婪的,并检查是否满足RegEx。由于不满意,它将保留最后一个字符并检查是否与RegEx匹配。因此,它将连续执行此操作并匹配1并找到(\d+)\s*\%.*off.*与字符串其余部分匹配的字符串。因此,.*实际上匹配直到1并离开\d+匹配5。这就是为什么它给出的原因5像这样将其更改为非贪婪

r'.*?(\d+)\s*\%.*off.*'

现在,.*由于是非贪婪的?因此,它将尽可能地匹配。因此,此处将不匹配任何内容,因为\d+匹配项为15。

注意:如您所见,它必须迭代尝试所有可能的匹配项。因此它效率很低。你实际上可以这样写

r'.*?(\d+)\s*?\%\s*?off.*'

由于我们到处都使用非贪婪运算符,因此它将比原始贪婪版本更好。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Python中的正则表达式无法正确匹配

来自分类Dev

正则表达式在Java中无法正确匹配

来自分类Dev

正则表达式模式无法在python中匹配

来自分类Dev

Ruby正则表达式无法正确匹配

来自分类Dev

正则表达式的正则表达式在Python中不匹配

来自分类Dev

无法在Java中匹配正则表达式

来自分类Dev

无法在Java中匹配正则表达式

来自分类Dev

无法匹配正则表达式组中的括号

来自分类Dev

无法在C中匹配正则表达式

来自分类Dev

Python无法正确解释正则表达式

来自分类Dev

在Python正则表达式中匹配\ [\]

来自分类Dev

正则表达式在python中匹配并替换

来自分类Dev

在python中匹配正则表达式

来自分类Dev

Python中的正则表达式-多行匹配

来自分类Dev

正则表达式用于Python中的匹配括号

来自分类Dev

在Python中搜索/匹配正则表达式

来自分类Dev

使用正则表达式匹配Python中的单词

来自分类Dev

Python中的正则表达式匹配问题

来自分类Dev

python中的复杂正则表达式匹配

来自分类Dev

python中的正则表达式与单词不匹配

来自分类Dev

HTML文件中的Python正则表达式匹配

来自分类Dev

python中的正则表达式以匹配Twitter句柄

来自分类Dev

在Python正则表达式中匹配\ [\]

来自分类Dev

在python中匹配正则表达式

来自分类Dev

python中的正则表达式匹配

来自分类Dev

python中的复杂正则表达式匹配

来自分类Dev

Python中的正则表达式匹配问题

来自分类Dev

匹配python pandas元组中的正则表达式

来自分类Dev

在 Python 中匹配多行正则表达式模式