2024-03-29 02:01:25 发布
网友
我想提取字符串中的数字百分比。以下是一些案例:
逗号仅用作分隔符,每个字符串只有一个百分比,因此不会出现以下字符串:
目前,我正在Python中使用以下脚本
def extract_percentage(x: str) -> float: float((re.sub(r'[^\d,]', '', x)).replace(',','.'))
它适用于上面的前两个示例,但对于第三个示例,输出为12.3
我该怎么做?最好使用Python
受Shahar Bental上述答案的启发,我得到了另一个不太依赖正则表达式的解决方案,并使用python中的split方法。但不确定是否更好
我在以前的脚本中添加了以下内容:
words = x.split(' ') for word in words: if '%' in word: return float((re.sub(r'[^\d,]', '', word)).replace(',','.'))
您的正则表达式将删除空格以及其他所有内容。我认为要使用regex查找某些内容,最好的方法是使用re库搜索它
re
我们将首先查找以%:'.*%'结尾的所有字符串。 对于Bank ABC 123% CDE这将返回Bank ABC 123% CDE,其中包含空格和非数字
%
'.*%'
Bank ABC 123% CDE
为了改进这一点,让我们查找最多带有1个逗号或点的数字:\d*[,.]?\d*%,这将返回123%作为您的输入
\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
受Shahar Bental上述答案的启发,我得到了另一个不太依赖正则表达式的解决方案,并使用python中的split方法。但不确定是否更好
我在以前的脚本中添加了以下内容:
您的正则表达式将删除空格以及其他所有内容。我认为要使用regex查找某些内容,最好的方法是使用
re
库搜索它我们将首先查找以
%
:'.*%'
结尾的所有字符串。 对于Bank ABC 123% CDE
这将返回Bank ABC 123% CDE
,其中包含空格和非数字为了改进这一点,让我们查找最多带有1个逗号或点的数字:
\d*[,.]?\d*%
,这将返回123%
作为您的输入总而言之,让我们用点代替逗号
请注意,答案是所有匹配项的数组
如果你想把号码拿出来,你现在可以做:
相关问题 更多 >
编程相关推荐