从包含多个数字的字符串中提取数字百分比

2024-03-29 02:01:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我想提取字符串中的数字百分比。以下是一些案例:

  • 输入:“银行ABC 123%CDE”->;输出:123.00(作为浮点数)
  • 输入:“一些随机银行IPCA+12,34%”->;产出:12.34
  • 输入:“银行1 2,3%”->;产出:2.3

逗号仅用作分隔符,每个字符串只有一个百分比,因此不会出现以下字符串:

  • 无效输入:“ABC银行,123%”
  • 无效输入:“银行ABC 123%和12,34%”

目前,我正在Python中使用以下脚本

def extract_percentage(x: str) -> float:
   float((re.sub(r'[^\d,]', '', x)).replace(',','.'))

它适用于上面的前两个示例,但对于第三个示例,输出为12.3

我该怎么做?最好使用Python


Tags: 字符串gt脚本示例数字银行float案例
2条回答

受Shahar Bental上述答案的启发,我得到了另一个不太依赖正则表达式的解决方案,并使用python中的split方法。但不确定是否更好

我在以前的脚本中添加了以下内容:

words = x.split(' ')
for word in words:
  if '%' in word:
    return float((re.sub(r'[^\d,]', '', word)).replace(',','.'))

您的正则表达式将删除空格以及其他所有内容。我认为要使用regex查找某些内容,最好的方法是使用re库搜索它

我们将首先查找以%:'.*%'结尾的所有字符串。 对于Bank ABC 123% CDE这将返回Bank ABC 123% CDE,其中包含空格和非数字

为了改进这一点,让我们查找最多带有1个逗号或点的数字:\d*[,.]?\d*%,这将返回123%作为您的输入

总而言之,让我们用点代替逗号

import re

str = 'Bank1 2,3%'
arr = [x.replace(',','.') for x in re.findall('\d*[,.]?\d*%',str)]
print(arr)
>>> ['2.3%']

请注意,答案是所有匹配项的数组

如果你想把号码拿出来,你现在可以做:

if len(arr)>0:
  number_without_percent_sign = arr[0][:-1]
  print(float(number_without_percent_sign))
>>> 2.3

相关问题 更多 >