python - 正则表达式 re.match() 不应该返回匹配
问题描述
我正在尝试从帖子标题中提取价格并将其与另一个价格进行比较。我发现了这个正则表达式模式:\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' 放在引号前面。我也尝试添加更多的 '\' 字符,但这也没有用。
解决方案
re.match
将从字符串的开头开始。因为字符串不是以数字开头的,所以不会匹配。你可以改用这样的东西:
假设s="[RAM] G.SKILL Ripjaws V Series 16GB (2 x 8GB) DDR4 3600mhz $69.99"
In [1]: regex = re.compile('\d{1,3}(?:[.,]\d{3})*(?:[.,]\d{2})')
In [2]: regex.findall(s)
Out[2]: ['69.99']
或者您需要考虑whatever
在字符串的开头,您可以像这样创建匹配group
:
In [1]: regex = re.compile('.*?(?P<price>\d{1,3}(?:[.,]\d{3})*(?:[.,]\d{2}))')
In [2]: match = regex.match(s)
In [3]: match
Out[3]: <re.Match object; span=(0, 65), match='[RAM] G.SKILL Ripjaws V Series 16GB (2 x 8GB) DDR>
In [4]: match.group('price')
Out[4]: '69.99'
推荐阅读
- javascript - 设置 width : 0 不隐藏文本
- excel - 使用单元格值过滤日期之间的数据透视表
- c# - 我正在尝试在 C# 中创建一个插件来验证 mailItem.Body 以避免特定内容,但是当我发送消息时我的事件没有激活
- jquery - 首次打开后引导模式不起作用
- python - 使用 PyGithub 在 Github 中获取用户信息
- kibana - 在 Kibana DSL 查询中查找特定序列中的关键字
- google-sheets - 根据某些条件将两列过滤为一列
- r - 检索时间格式以在 R 中转换为秒
- java - 引起:java.net.UnknownHostException:host.docker.internal
- python - NumPy:每 m 个点选择 n 个点