我想处理一些像这样打印出来的字符串日期
'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']
有关修正此正则表达式的任何建议吗?
答案 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;]