python - Python,正则表达式:在正则表达式中放置字符串列表
问题描述
我有一个识别价格格式字符串的正则表达式:
import re
price = re.compile(r'^.*[\$\£\€]\s?\d{1,3}(?:[.,]\d{3})*(?:[.,]\d{1,2})?.*$')
但是,我希望有一个函数能够将货币符号列表放入上面的第一个字符集中,而不仅仅是我已经确定的三个。例如,
import re
currencies = ['$', '£', '€']
key_characters = '|'.join(currencies)
price_re = re.compile(r'^.*[({})]\s?\d{1,3}(?:[.,]\d{3})*(?:[.,]\d{1,2})?.*$')
word = re.compile(price_re.format(key_characters))
当我尝试运行最终的“单词”函数时,出现以下错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: '1,3'
当我删除上面列出的两个数字之一时,Traceback 的第三行变为:
ValueError: cannot switch from automatic field numbering to manual field specification
有没有办法做我想做的事?是否有多余的'|' 集合中的人物?
解决方案
你不能格式化一个正则表达式对象,你应该用一个字符串来做。然后,您需要将文字花括号加倍,以便它们可以被解析为文字{
和}
. 不要在里面使用组[...]
,只[{}]
在格式字符串和join
键中使用空字符串而不是|
。
您可以使用
import re
currencies = ['$', '£', '€']
key_characters = ''.join(currencies)
price_re = re.compile(r'[{}]\s?\d{{1,3}}(?:[.,]\d{{3}})*(?:[.,]\d{{1,2}})?'.format(key_characters))
for m in price_re.findall(r'$13344,34, £3424, €7777'):
print(m)
请参阅Python 演示。
推荐阅读
- swiftui - 在 SwiftUI 中获取分组列表中的视图大小
- api - 从频道 ID 获取广播 ID - youtube api v3
- php - HttpOnly cookie 不会删除
- javascript - 如何通过 valueOf 方法返回数组?
- javascript - 无法读取未定义的属性变量。哪里有错?
- javascript - URL 参数未传递到 Adobe Experience Manager 中的表单
- c# - 如何使用 C# 和 Appium 检查 WebElement 是否不存在并抛出正确的错误
- python - 在python中使用sklearn计算数据点和质心(kmeans)之间的距离
- image - 基于矩不变量的对象椭圆率 - Matlab
- google-bigquery - 在表 bigquery 中查看查询结果