如何在python中修复这个正则表达式?

时间:2015-05-29 19:10:15

标签: python regex

我想处理一些像这样打印出来的字符串日期

'node0, node1 0.04, node8 11.11, node14 72.21\n'
'node1, node46 1247.25, node6 20.59, node13 64.94\n'

我想在这里找到所有浮点数,这是我使用的代码

for node in nodes
    pattern= re.compile('(?<!node)\d+.\d+')
    distance = pattern.findall(node)

然而结果是这样的

['0.04', '11.11', '4 72']

虽然我想要的是这个

['0.04', '11.11', '72.21']

有关修正此正则表达式的任何建议吗?

2 个答案:

答案 0 :(得分:4)

表达式中的.未转义。

for node in nodes:
    pattern = re.compile(r"(?<!node)\d+\.\d+")
    distance = pattern.findall(node)

答案 1 :(得分:4)

在正则表达式中,.字符被解释为通配符,可以匹配(几乎)任何字符。因此,您的搜索模式实际上允许一个数字或一组数字,后跟任何字符,后跟另一个数字或一组数字。要停止对点字符的这种解释,请使用反斜杠\对其进行转义。

(旁白:你不需要在你的循环中编译你的正则表达式模式。事实上,这将减慢你的代码。)

pattern = re.compile('(?<!node)\d+\.\d+')
for node in nodes:
    distance = pattern.findall(node)
    print distance

输出:

  

[&#39; 0.04&#39;,&#39; 11.11&#39;,&#39; 72.21&#39;]
  [&#39; 1247.25&#39;,&#39; 20.59&#39;,&#39; 64.94&#39;]