如何检查字符串在Python中是否具有特定格式

时间:2016-11-07 20:41:00

标签: string python-3.x format

所以我的代码应该处理行并查看行是否是坐标

"x y z"

示例坐标:

1.500 -6.002 0.007

用数字代表符号,如果是,我将处理所述行,但如果没有,我会保持不变。我认为这将是一个合适的工具,但我对基于过去已经发生的不同场景的技术诀窍太新了。

1 个答案:

答案 0 :(得分:2)

正则表达式不是查看数字是否为浮点数的最佳选择。它是复杂的,给定所有可能的形式,有效的浮点数可以采用并可能采用未来的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如果错误,就像这样:

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)