我想匹配一个字符串,例如:
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+
几次?或者更好的方法来编写整个正则表达式。
答案 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+)")
此外,您的正则表达式与.123
或1
等数字不匹配。你可能会或可能不会关心这个。这是我通常用来匹配浮点数的r"(\d+(?:\.\d*)?|\.\d+)"
。它会匹配这些表单的数量:1
,1.
,1.1
和.1
,而不匹配.
。