我收到了很多以这种形式写的数据(从文件中读取):
(31265+0j)
(-5613.54281374+404.957401125j)
(1371.65134844+2671.06617046j)
...
然而我想提取数字部分,比如[31265, 0]
或[-5613.54281374 , 404.957401125]
,我在python中以我认为可行的方式编码:
re.findall(r'.*([\+|\-]?\d+.?\d+)([\+|\-]?\d+.?\d+).*', tempStr)
但它不起作用,它给了我这个:
[]
[('26', '5+0')]
[('11', '25')]
...
它有什么问题?它是关于懒惰模式的吗?我该如何解决?
========================更新====================== == 对我来说,这个问题已经解决了,但我仍然想知道正则表达式部分有什么问题,是否有人愿意帮助我指出正则表达式模式的错误?
答案 0 :(得分:6)
这些是数字。你不应该在这里使用正则表达式。第一部分是real
,第二部分是imaginary
,您可以像这样访问它们
n = (-5613.54281374+404.957401125j)
n.real
n.imag
起初可能很难发现,因为在数学中我们经常使用i = sqrt(-1)
但在python中它是j = sqrt(-1)
但是有趣的是,如果你这样做了
import math
math.sqrt(-1)
您将获得ValueError
<强>更新强>:
如果数据在文件中
with open('complex.txt') as f:
for line in f:
number = complex(line.strip())
更新2: 如果你真的,真的,真的想要使用正则表达式:
map(float, line[1:-2].split('+'))
如果您有复数部分可以为负数的数字,请使用re.split()。
答案 1 :(得分:1)
使用.real和.imag将为您提供所需的输出
foo = (31265 + 0j)
bar = [foo.real , bar.imag]
#>>>[31265.0 , 0.0]