Python 如何使用正则表达式将字符串中的数字格式化为2.5k到2.5e3

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',

我正在用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',
    '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请通过编辑将该尝试添加到您的原始帖子中您假设输入是十进制值,但它不是