gpt4 book ai didi

Python 正则表达式 : compute and replace numeric values

转载 作者:行者123 更新时间:2023-11-28 20:12:44 25 4
gpt4 key购买 nike

我有一个正则表达式问题,它似乎不像我想象的那么普遍:我想提取所有具有 px 单位的数值,应用一些计算,然后在其中重新注入(inject)新值我的字符串。我不想包含 px 字符串(参见下面的示例),但我可以使用另一种方法来保留它们或更改单位类型。

示例,将值乘以 2.5:

来自“2px aperture 12px science 2.1px yummy cake”

我要“5光圈30科学5.25美味蛋糕”

我做了一个粗略的脚本,但我没有得到想要的输出:

import re
my_string = "2px aperture 12px science 2.1px yummy cake"
nb_list= re.findall(r"([0-9.]+)px", my_string)
splitted_string = re.findall('.*?px', my_string)
print(f"splitted_string = {splitted_string}")
print(f"nb_list = {nb_list}")
new_list = []
for i in range(0, len(nb_list)):
new_n = str(float(nb_list[i])*2.5)
new_string = re.sub(r"[0-9.]+px", new_n, splitted_string[i])
new_list.append(new_string)
new_list = ''.join(new_list)
print(f"new_list = {new_list}")

结果:

new_list = 5.0 aperture 30.0 science 5.25

我明白为什么会得到这个结果,但我不知道要更改什么才能获得所需的输出。

最佳答案

只需使用带有回调的re.sub:

r = re.sub(
r'(\d+(\.\d+)?)px\b',
lambda m: '{:g}'.format(float(m.group(1)) * 2.5),
s)

很容易将其扩展到多个单元,例如:

units = {
'px': 2.5,
'em': 4,
}

r = re.sub(
fr'(\d+(\.\d+)?)({"|".join(units)})\b',
lambda m: '{:g}'.format(float(m.group(1)) * units[m.group(3)]),
s)

关于Python 正则表达式 : compute and replace numeric values,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56955219/

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