如何在正则表达式中定义几个浮点组?

时间:2015-09-29 12:37:02

标签: python regex

我想匹配一个字符串,例如:

 k-point    1 :    0.00000000 0.00000000 0.00000000     weight = 0.01562500

我写了那个正则表达式:

kpt_patt = re.compile("^\s*k-point\s+(\d+) :\s+" +
                      "([+-]?\d+\.\d+)\s+" +
                      "([+-]?\d+\.\d+)\s+" +
                      "([+-]?\d+\.\d+)\s+" +
                      "weight = (\d+\.\d+)")

line = " k-point    1 :    0.00000000 0.00000000 0.00000000     weight = 0.01562500"
m = kpt_patt.match(line)
print(m.groups())

In [1]: m.groups()
Out[1]: ('1', '0.00000000', '0.00000000', '0.00000000', '0.01562500')

它有效,但有没有更好的方式来说我想要这个组([+-]?\d+\.\d+)\s+几次?或者更好的方法来编写整个正则表达式。

1 个答案:

答案 0 :(得分:1)

使用字符串乘法。我已将r前缀添加到您的正则表达式字符串中。

float_rx = r"([+-]?\d+\.\d+)\s+"

kpt_patt = re.compile(r"^\s*k-point\s+(\d+) :\s+" +
                      float_rx * 3 +
                      r"weight = (\d+\.\d+)")

此外,您的正则表达式与.1231等数字不匹配。你可能会或可能不会关心这个。这是我通常用来匹配浮点数的r"(\d+(?:\.\d*)?|\.\d+)"。它会匹配这些表单的数量:11.1.1.1,而不匹配.