String 如何在Python中检查字符串是否具有特定格式
所以我的代码应该处理线条,看看线条是否是坐标String 如何在Python中检查字符串是否具有特定格式,string,python-3.x,format,String,Python 3.x,Format,所以我的代码应该处理线条,看看线条是否是坐标 "x y z" 示例坐标: 1.500 -6.002 0.007 用数字表示符号,如果是的话,我会处理这一行,如果不是,我会保持不变。我认为re将是正确的工具,但我太新了,不知道如何根据过去已经发生的不同场景进行操作 正则表达式不是判断数字是否为浮点数的最佳选择。这很复杂,因为一个有效的浮点数可以采用并且在Python的未来版本中可能采用所有可能的形式 因此,最好尝试转换它,看看Python是否能做到,如果不能,则捕获异常 我想这样做如下: de
"x y z"
示例坐标:
1.500 -6.002 0.007
用数字表示符号,如果是的话,我会处理这一行,如果不是,我会保持不变。我认为re将是正确的工具,但我太新了,不知道如何根据过去已经发生的不同场景进行操作 正则表达式不是判断数字是否为浮点数的最佳选择。这很复杂,因为一个有效的浮点数可以采用并且在Python的未来版本中可能采用所有可能的形式 因此,最好尝试转换它,看看Python是否能做到,如果不能,则捕获异常 我想这样做如下:
def check_line(line_coord):
try:
return len([float(x) for x in line_coord.split()])==3
except ValueError:
return False
- 在根据空格拆分的行上创建具有浮点转换的列表
- 检查列表的长度是否等于3:如果确定,则返回
True
- 通过
异常来保护它,如果捕获到异常,则返回ValueError
False
print(check_line("10 4.5dd 5.6")) # bogus float in 2nd position
print(check_line("10 5.6")) # only 2 fields
print(check_line("10 -40 5.6")) # 3 fields, all floats
False
False
True
编辑:以上仅检查值是否在此处。Dawg建议了一种返回三元组或None
if error的方法,如下所示:
def check_line(line_coord):
try:
x,y,z = map(float,line_coord.split())
return x,y,z
except ValueError:
return None
(map
更快,因为它不会创建临时列表)。通过与之前相同的测试,我们得到:
None
None
(10.0, -40.0, 5.6)
如果坐标浮动之间的符号为“”而不是“;”,是否可以添加浮动检查?(我有点睡着了,很抱歉)你可以做
try:x,y,z=map(float,line.split());返回x,y,z;除ValueError外:返回无