好的,我正在处理这个
ENDF
数据,请参阅
此处
有时,在文件中,它们很可能是我见过的最烦人的科学计数法浮点数编码
1
那里经常使用类似
1.234e-3
的东西来代替
1.234-3
(省略“e”)。
现在我看到了一个库,它只是将
-
更改为
e-
或||。 |到
+
通过简单的替换。但当某些数字可能为负数时,这就不起作用了。当输入是
e+
时,你最终会得到一些废话,比如
e-5.122e-5
-5.122-5
所以,我想我需要转向正则表达式?我愿意接受另一种更简单的解决方案,但这是我现在能想到的最好的解决方案。我正在使用
python 库。我可以做一个简单的替换,我寻找
re
并像这样替换它:
[0-9]-[0-9]
但显然这通常不起作用,因为我需要让
import re
str1='-5.634-5'
x = re.sub('[0-9]-[0-9]','4e-5',str1)
print(x)
之前和之后的数字保持原来的样子,不仅仅是我编造的东西...我之前使用过捕获组,但是在这种情况下,对
-
之前和之后的数字使用捕获组并使用以下命令将其反馈回替换中的最快方法是什么
-
正则表达式库
Python
?
import re
1 是的,我知道,fortran...80 个字符...节省空间...打孔卡...没人在乎了。
1 Yes, I know, fortran...80 characters...save space...punch cards...nobody cares anymore.
可以使用捕获组来做到这一点!说得对,我们需要使用捕获组来提取连字符前后出现的数字。
这是可以使用的正则表达式:
import re
str1 = '-5.634-5'
# str1 = '1.234-3'
# str1 = '1.234+3'
x = re.sub(r"([\d\.]+)(-)([\d]+)", r"\1e\2\3", str1)
print(x)
让我们来分解一下这个正则表达式:
-
([\d\.]+)
:这部分匹配一个或多个数字或点,并将此匹配存储在第一个捕获组中。 -
(-)
:这匹配一个连字符,并将其存储在第二个捕获组中。 -
([\d]+)
:这匹配一个或多个数字,并将此匹配存储在第三个捕获组中。
在替换字符串
r"\1e\2\3"
中,我们使用:
-
\1
:引用第一个捕获组的内容。 -
e
:插入字母 'e'。 -
\2
:引用第二个捕获组的内容(连字符)。 -
\3
:引用第三个捕获组的内容。
这样,代码就能正确处理正数、负数以及指数为正数或负数的情况,并将它们转换为标准的科学计数法表示形式。
标签:python,regex,scientific-notation From: 78813619