【发布时间】:2020-03-21 19:56:15
【问题描述】:
我正在尝试从帖子标题中提取价格并将其与另一个价格进行比较。我发现这个正则表达式模式:\d{1,3}(?:[.,]\d{3})*(?:[.,]\d{2}) 非常适合我的需求。
我在https://regexr.com/ 上对其进行了测试,它返回了正确的匹配。但是,当我尝试在 python 3 中执行此操作时,我没有得到任何匹配项。代码如下所示:
def isPriceBetter(CurrentPrice, title):
r = re.compile(r'\d{1,3}(?:[.,]\d{3})*(?:[.,]\d{2})')
newPrice = r.match(title)
if newPrice == None:
return False
newPrice = float(newPrice)
if newPrice > CurrentPrice:
return False
return True
newPrice 变量始终为None,即使我测试了与代码在https://regexr.com/ 上测试的完全相同的字符串,并且它返回了一个匹配项。起初我认为我的模式字符串可能被错误地转义,这就是为什么我把 'r' 放在引号前面。我也尝试添加更多的 '\' 字符,但这也不起作用。
【问题讨论】:
-
您尝试从中提取的帖子标题的示例是什么?
-
"[RAM] G.SKILL Ripjaws V 系列 16GB (2 x 8GB) DDR4 3600mhz $69.99"
-
嗯,好的。那么在这种情况下
re.match是从字符串的开头开始的。因此,您需要通过.*?\d{1,3}(?:[.,]\d{3})*(?:[.,]\d{2}或在\d{1,3}(?:[.,]\d{3})*(?:[.,]\d{2}上执行re.findall来解决这一问题
标签: python regex python-3.x string parsing