我有以下 Python 列表:
my_list = ['Prix TTC 欧元:10,10', 'Prix HT 欧元 8,42', 'TVA (20.00%) 欧元:1,68']
我想获取所有数字,如 10,10, 8,42
和 1,68
,但不带百分比数字 (20.00%)
我的代码:
my_list = ['Prix TTC euros : 10,10', 'Prix HT euros 8,42', 'TVA (20.00%) euros : 1,68']
for item in my_list:
try:
found = re.search('([+-]?([0-9]*[,.])?[0-9]+)', item).group()
except AttributeError:
found = None # apply your error handling
print(found)
它打印:
10,10
8,42
20.00
我试图转义最后找到的数字 20.00 并得到 1,68。有没有办法转义以 % 结尾的数字或其他解决方案。
最佳答案
有一种方法可以避免将百分比值与后跟否定前瞻的单词边界相匹配,这将拒绝后跟 %
的匹配。符号:
import re
my_list = ['Prix TTC euros : 10,10', 'Prix HT euros 8,42', 'TVA (20.00%) euros : 1,68']
for item in my_list:
found = re.search(r'[-+]?\b(?!\d+(?:[,.]\d+)?%)\d+(?:[.,]\d+)?', item)
if found:
print(found.group())
请参阅Python demo online ,输出:['10,10', '8,42', '1,68']
.
另请参阅regex demo :
-
[-+]?
- 可选-
或+
-
\b
- 单词边界 -
(?!\d+(?:[,.]\d+)?%)
- 如果存在 1+ 位数字,则匹配失败的负向预测,可选序列.
或,
然后紧邻当前位置右侧的 1+ 位数字 -
\d+
- 1+ 位数字 -
(?:[.,]\d+)?
- 可选序列.
或,
然后是 1+ 位数字。
关于Python - 使用正则表达式查找末尾没有%的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56065736/