gpt4 book ai didi

python - 将所有数值替换为格式化字符串

转载 作者:太空狗 更新时间:2023-10-30 02:17:48 24 4
gpt4 key购买 nike

我想做的是:

找出字符串中的所有数值。

input_string = "高露潔光感白輕悅薄荷牙膏100   79.80"

numbers = re.finditer(r'[-+]?[0-9]*\.?[0-9]+(?:[eE][-+]?[0-9]+)?',input_string)

for number in numbers:
print ("{} start > {}, end > {}".format(number.group(), number.start(0), number.end(0)))

'''Output'''
>>100 start > 12, end > 15
>>79.80 start > 18, end > 23

然后我想将所有整数和浮点值替换为某种格式:

INT_(位数)FLT(小数位数)

例如。 100 -> INT_3//79.80 -> FLT_2

因此,期望的输出字符串是这样的:

"高露潔光感白輕悅薄荷牙膏INT_3   FLT2"

但是Python中的string replace substring方法有点奇怪,不能存档我想做的。

所以我尝试使用子串追加子串的方法

string[:number.start(0)] + "INT_%s"%len(number.group()) +.....

这看起来很愚蠢,最重要的是我仍然无法让它工作。

谁能给我一些关于这个问题的建议?

最佳答案

使用 re.sub 和一个回调方法,您可以在其中对匹配项执行各种操作:

import re
def repl(match):
chunks = match.group(1).split(".")
if len(chunks) == 2:
return "FLT_{}".format(len(chunks[1]))
else:
return "INT_{}".format(len(chunks[0]))

input_string = "高露潔光感白輕悅薄荷牙膏100 79.80"
result = re.sub(r'[-+]?([0-9]*\.?[0-9]+)(?:[eE][-+]?[0-9]+)?',repl,input_string)
print(result)

参见 Python demo

详细信息:

  • 正则表达式现在在数字部分 (([0-9]*\.?[0-9]+)) 上有一个捕获组,这将在 中进行分析repl 方法
  • repl 方法中,第 1 组内容用 . 拆分,看看我们是否有 float / double ,如果有,我们返回小数部分的长度部分,否则,整数的长度。

关于python - 将所有数值替换为格式化字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39120783/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com