Python - 使用正则表达式查找末尾没有%的数字

标签 python regex

我有以下 Python 列表:
my_list = ['Prix TTC 欧元:10,10', 'Prix HT 欧元 8,42', 'TVA (20.00%) 欧元:1,68']

我想获取所有数字,如 10,10, 8,421,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/

相关文章:

javascript - 正则表达式将匹配中的所有匹配替换 x 次

python - Altair:使用带有对数刻度的配色方案

python - 将图像发送到 CouchDb 两次而不是 1 次

python - 使用 django-filer,我可以选择图像进入的文件夹,从 'Unsorted Uploads'

Ruby gsub 删除电话号码中的非法字符

javascript - 为什么 string.match(...)[0] 会抛出异常?

python - Kivy - UI 上的标签未更新

python - 查找 python 线程状态(无论是 sleep 还是事件)

JavaScript 正则表达式 .*?

php - 替换字符串 PHP 中最后一次出现的至少双倍换行符 (\n\n)