我有一个文本文件:
z.server(y.host=>["x.012345","x.054321","x.045455"], :stop => 10)
z.server(y.host=>["x.067891","x.043215","x.045195"], :stop => 10)
z.server(y.host=>["x.012355","x.075321","x.045855"], :stop => 10)
我有一个脚本,我想提取以下数据:
^{pr2}$当我运行python脚本时,我得到:
y.host 012345","x.054321","x.045455
y.host 067891","x.043215","x.045195
y.host 012355","x.075321","x.045855
我错过了什么?谢谢你的帮助。在
这是我的剧本:
#!/usr/bin/python
import re,sys
f = "test.txt"
rgxxid = re.compile('(^z\.\w+\((\w+\.\w+)=>\["x\.(\d+.*)"\]).\s+:\w+\s+=>\s\d+\)')
for l in open(f,'r').readlines():
lm = re.match(rgxxid,l)
if lm:
hlm = lm.group(2)
xid = lm.group(3)
print hlm, xid
else:
sys.stderr.write("No XID match. "+l+"\n")
您可能会发现使用pyparsing比较容易。这无疑会使捕获作为示例的行的语法变得更简单。在
通知:
一。在
输出:
^{pr2}$简而言之,您当前的regex存在以下问题:
模式
^{pr2}$\d+.*
表示匹配一个或多个数字,后跟任何直到最后一个引号。您在输出中看到的情况证实了这一点:在数字列表结束之前,捕获组已经消耗了所有内容。相反,请尝试使用以下模式:
在这里,我为这三个numner提供了三个显式的捕获组。下面是正则表达式的演示:
Demo
更新后的脚本应该如下所示:
相关问题 更多 >
编程相关推荐