我想在字符串中提取数字百分比。这是一些情况:
逗号仅用作分隔符,每个字符串只有一个百分比,因此以下字符串将永远不会出现:
当前,我在Python中使用以下脚本
def extract_percentage(x: str) -> float:
float((re.sub(r'[^\d,]', '', x)).replace(',','.'))
它适用于上面的前两个示例,但是对于第三个示例,输出为12.3
我应该怎么做?最好使用Python。
答案 0 :(得分:2)
您的正则表达式将删除空格以及其他所有内容。我认为要使用正则表达式查找内容,最好的方法是使用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
答案 1 :(得分:0)
受到上述Shahar Bental的回答的启发,我得到了另一个解决方案,该解决方案较少依赖正则表达式,并使用python的split方法。不确定是否更好。
我在以前的脚本中添加了以下内容:
words = x.split(' ')
for word in words:
if '%' in word:
return float((re.sub(r'[^\d,]', '', word)).replace(',','.'))