首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用正则表达式将字符串中的2.5k数字格式化为2.5e3

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

Stack Overflow用户
提问于 2018-05-28 17:56:58
回答 3查看 130关注 0票数 1

我正在使用python解析一个spice文件,其中包含字符串数学表达式,并且我正在将文本文件转换为python脚本。

文件中的数学表达式示例如下:

代码语言:javascript
复制
expr = 'k1 + 4.35k + 3.69meg*(pow(2.4u, 2*km2))'

我想找出表达式中的所有比例因子,并将它们转换为它们的指数值:

代码语言:javascript
复制
scaling_factors = {
    'g'  : 'e9',
    'meg': 'e6',
    'k'  : 'e3',
    'm'  : 'e-3',
    'u'  : 'e-6',
    'n'  : 'e-9',
}

我想要的输出是这样的:

代码语言:javascript
复制
converted_expr = 'k1 + 4.35e3 + 3.69e6*(pow(2.4e-6, 2*km2))'

我试过这个:

代码语言:javascript
复制
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))

输出:

代码语言:javascript
复制
k1 + \\de3

但它不起作用

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-05-28 18:07:09

使用否定前视((?<=...))来确保符号前有一个数字,并使用单词边界断言(\b)来捕捉"km2“的情况:

代码语言:javascript
复制
import re
expr = re.sub(r"(?<=\d)k\b", "e3", expr)

如果你想避免多次这样做,这里有一个使用函数作为替换值的诀窍:

代码语言:javascript
复制
def sn_replace(match):
    return scaling_factors[match.group(1)]

expr = re.sub(r"(?<=\d)(g|k|meg|m|u|n)\b", sn_replace, expr)

re.sub的第二个参数是函数时,不是用文本替换匹配,而是使用match对象调用该函数,并将其返回值用作替换。

票数 3
EN

Stack Overflow用户

发布于 2018-05-28 18:25:11

写得有点快,所以可能不是完美的,但是像这样的东西?

代码语言:javascript
复制
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)

输出:

代码语言:javascript
复制
k1 + 4.3e3+ 3.6e6(pow(2.e-6 2*km2))
票数 0
EN

Stack Overflow用户

发布于 2018-05-28 18:00:48

如果你有字符串形式的数字,你只需要替换:

代码语言:javascript
复制
for key in dictionary.iterkeys():
    address.replace(key, dictionary[key])

如果您有十进制值的数字

代码语言:javascript
复制
from decimal import Decimal
'%.2E' % Decimal('40800000000.00000000000000')
# returns '4.08E+10'

Display a decimal in scientific notation

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50563691

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档