Python 如何使用正则表达式将字符串中的数字格式化为2.5k到2.5e3
我正在用python解析一个包含字符串数学表达式的spice文件,并将文本文件转换为python脚本 文件中的数学表达式示例如下:Python 如何使用正则表达式将字符串中的数字格式化为2.5k到2.5e3,python,Python,我正在用python解析一个包含字符串数学表达式的spice文件,并将文本文件转换为python脚本 文件中的数学表达式示例如下: expr = 'k1 + 4.35k + 3.69meg*(pow(2.4u, 2*km2))' 我希望找到表达式中的所有比例因子,并将其转换为指数值: scaling_factors = { 'g' : 'e9', 'meg': 'e6', 'k' : 'e3', 'm' : 'e-3', 'u' : 'e-6',
expr = 'k1 + 4.35k + 3.69meg*(pow(2.4u, 2*km2))'
我希望找到表达式中的所有比例因子,并将其转换为指数值:
scaling_factors = {
'g' : 'e9',
'meg': 'e6',
'k' : 'e3',
'm' : 'e-3',
'u' : 'e-6',
'n' : 'e-9',
}
我想要的输出是:
converted_expr = 'k1 + 4.35e3 + 3.69e6*(pow(2.4e-6, 2*km2))'
我试过这个:
digits_re = r"([0-9]*\.[0-9]+|[0-9]+)k"
sample = 'k1 + 4.3k'
print(re.sub(digits_re, digits_re.replace('k', 'e3'), sample))
输出:
k1 + \\de3
k1 + 4.3e3+ 3.6e6(pow(2.e-6 2*km2))
但是,如果您将数字作为字符串,则它不起作用,您只需要替换:
for key in dictionary.iterkeys():
address.replace(key, dictionary[key])
如果您有十进制数值
from decimal import Decimal
'%.2E' % Decimal('40800000000.00000000000000')
# returns '4.08E+10'
使用负前瞻(
)(?我不确定是否有这样的库
正如其中一条评论所建议的,您可以使用str.replace,但您必须编写自己的循环和If条件,因为您只想在字母正确的位置替换它们
我知道这并不能马上给你答案,但它可以引导你走上正确的道路。写得有点快,所以可能并不完美,但像这样的东西
import re
scaling_factors = {
'g' : 'e9',
'meg': 'e6',
'k' : 'e3',
'm' : 'e-3',
'u' : 'e-6',
'n' : 'e-9',
}
expr = 'k1 + 4.35k + 3.69meg*(pow(2.4u, 2*km2))'
for k,v in scaling_factors.items():
ptrn=re.compile('\d('+k+')\D')
expr=ptrn.sub(v,expr)
print(expr)
输出:
k1 + \\de3
k1 + 4.3e3+ 3.6e6(pow(2.e-6 2*km2))
感谢您给我们一个清晰的想法,让我们知道您想要实现什么,但是您自己尝试过什么吗?您至少尝试过使用str.replace
?我最近开始阅读有关正则表达式的内容,到目前为止,我的尝试都失败了…我尝试了import-re-sample='k1+4.35k+3.69meg*(pow(2.4u,2*km2))'打印(re.findall('([0-9]*\.[0-9]+|[0-9]+]k“,sample”)打印(re.findall(([0-9]*\.[0-9]+|[0-9]+[0-9]+]meg”,sample))
output['4.35']['3.69']@IsslamAbdelhadi请通过编辑将该尝试添加到您的原始帖子中您假设输入是十进制值,但它不是