使用re在python中匹配数字

Ama*_*Gûl 2 python regex string complex-numbers python-3.x

我用这种形式写了很多数据(从文件中读取):

(31265+0j)
(-5613.54281374+404.957401125j)
(1371.65134844+2671.06617046j)
...
Run Code Online (Sandbox Code Playgroud)

然而我想提取数字部分,比如[31265, 0][-5613.54281374 , 404.957401125],我在python中编码的方式我认为它会起作用:

re.findall(r'.*([\+|\-]?\d+.?\d+)([\+|\-]?\d+.?\d+).*', tempStr)
Run Code Online (Sandbox Code Playgroud)

但它不起作用,它给了我这个:

[]
[('26', '5+0')]
[('11', '25')]
...
Run Code Online (Sandbox Code Playgroud)

它出什么问题了?它是关于懒惰模式的吗?我该如何解决?

========================更新========================我,这个问题已经解决了,但我仍然想知道正则表达式部分有什么问题,有人愿意帮我指出正则表达式模式有什么问题吗?

e4c*_*4c5 6

这些是数字.你不应该在这里使用正则表达式.第一部分是real第二部分,imaginary你可以像这样访问它们

 n = (-5613.54281374+404.957401125j)
 n.real
 n.imag
Run Code Online (Sandbox Code Playgroud)

这可能一开始很难发现,因为在数学中我们经常使用i = sqrt(-1)但是在python中它却是j = sqrt(-1)有趣的,如果你这样做了

import math
math.sqrt(-1) 
Run Code Online (Sandbox Code Playgroud)

你会得到一个 ValueError

更新:

如果数据在文件中

with open('complex.txt') as f:
    for line in f:
        number = complex(line.strip())
Run Code Online (Sandbox Code Playgroud)

更新2: 如果你真的,真的,真的想要使用正则表达式:

 map(float, line[1:-2].split('+'))
Run Code Online (Sandbox Code Playgroud)

如果您有复数部分可以为负数的数字,请使用re.split().