Python 使用“re.findall”拆分字符串时出错

Python 使用“re.findall”拆分字符串时出错,python,Python,我需要把一个字符串分成三个值x,y,z,字符串是这样的48,25,19 我使用了re.findall,它工作正常,但有时会产生这种错误 平面X,平面Y,平面Z=re.findall\d+。\d+,平面位置 ValueError:没有足够的值来解压缩预期的3,得到0 代码如下: def read_data(): # reading from file file = open("D:/Cs/Grad/Tests/airplane test/Reading/

我需要把一个字符串分成三个值x,y,z,字符串是这样的48,25,19

我使用了re.findall,它工作正常,但有时会产生这种错误

平面X,平面Y,平面Z=re.findall\d+。\d+,平面位置

ValueError:没有足够的值来解压缩预期的3,得到0

代码如下:



    def read_data():
        # reading from file
        file = open("D:/Cs/Grad/Tests/airplane test/Reading/Positions/PlanePos.txt", "r")
        planepos = file.readline()
        file.close()
        file = open("D:/Cs/Grad/Tests/airplane test/Reading/Positions/AirportPosition.txt", "r")
        airportpos = file.readline()
        file.close()
        # ==================================================================
        # spliting and getting numbers
        plane_X, plane_Y, plane_Z = re.findall("\d+\.\d+", planepos)
        airport_X, airport_Y, airport_Z = re.findall("\d+\.\d+", airportpos)
        return plane_X,plane_Y,plane_Z,airport_X,airport_Y,airport_Z

我需要的是将字符串48,25,19拆分为x=48,y=25,z=19 因此,如果有人知道更好的方法或如何解决此错误,我们将不胜感激。

您可以使用ast.literal\u eval安全地评估字符串:

import ast

s = '(48,25,19)'
x, y, z = ast.literal_eval(s)

# x => 48
# y => 25
# z => 19
您可以使用ast.literal\u eval安全地评估字符串:

import ast

s = '(48,25,19)'
x, y, z = ast.literal_eval(s)

# x => 48
# y => 25
# z => 19

您的正则表达式只适用于带小数点的数字,而不适用于整数,因此会出现错误。您可以将字符串中的括号和空格去掉,然后用逗号分割字符串,并将结果字符串序列映射到浮点构造函数:

x, y, z = map(float, planepos.strip('() \n').split(','))

您的正则表达式只适用于带小数点的数字,而不适用于整数,因此会出现错误。您可以将字符串中的括号和空格去掉,然后用逗号分割字符串,并将结果字符串序列映射到浮点构造函数:

x, y, z = map(float, planepos.strip('() \n').split(','))

如果数字是整数,则可以使用正则表达式:

re.findall(r"\d+","(48,25,19)")                                         
['48', '25', '19']
如果存在混合数字:

re.findall(r"\d+(?:\.\d+)?","(48.2,25,19.1)")                           
['48.2', '25', '19.1']

如果数字是整数,则可以使用正则表达式:

re.findall(r"\d+","(48,25,19)")                                         
['48', '25', '19']
如果存在混合数字:

re.findall(r"\d+(?:\.\d+)?","(48.2,25,19.1)")                           
['48.2', '25', '19.1']

这比我写的更有意义,但仍然会产生一些错误,但我可以活着修复它,谢谢。这比我写的更有意义,但仍然会产生一些错误,但我可以活着修复它,谢谢。谢谢你的帮助这将是有帮助的,但上一个将帮助我更多,因为我以后需要转换谢谢。谢谢你的帮助这将是有帮助的,但上一个将帮助我更多,因为我以后需要转换谢谢。谢谢你的评论帮助我了解它是如何工作的。谢谢你的评论帮助我让我了解它是如何工作的。