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)
它出什么问题了?它是关于懒惰模式的吗?我该如何解决?
========================更新========================我,这个问题已经解决了,但我仍然想知道正则表达式部分有什么问题,有人愿意帮我指出正则表达式模式有什么问题吗?
这些是数字.你不应该在这里使用正则表达式.第一部分是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().