我正在尝试编写一个正则表达式来匹配具有多行的文本文件,例如:
* 964 0050.56aa.3480 dynamic 200 F F Veth1379
* 930 0025.b52a.dd7e static 0 F F Veth1469
我的目的是匹配" 0050.56aa.3480"和" Veth1379"并将它们放入组(1)和&第(2)组稍后使用。
我写的正则表达式是:
\*\s*\d{1,}\s*(\d{1,}\.(?:[a-z][a-z]*[0-9]+[a-z0-9]*)\.\d{1,})\s*(?:[a-z][a-z]+)\s*\d{1,}\s*.\s*.\s*((?:[a-z][a-z]*[0-9]+[a-z0-9]*))
但是当我测试时,它似乎没有工作: http://www.pythonregex.com/
有人可以指出我在这里做的任何明显错误。
谢谢, 〜新手
答案 0 :(得分:2)
试试这个:
^\* [0-9]{3} +([0-9]{4}.[0-9a-z]{4}.[0-9a-z]{4}).*(Veth[0-9]{4})$
第一部分是捕获组1,捕获组2中的“Veth”代码。
请考虑将Stack Overflow Regular Expressions FAQ加入书签以供将来参考。底部有一个在线测试人员列表。
答案 1 :(得分:2)
我认为你不需要正则表达式:
for line in open('myfile','r').readlines():
fields = line.split( )
print "\n" + fields[1] + "\n" +fields[6]
答案 2 :(得分:0)
非常严格版本看起来像这样:
^\*\s+\d{3}\s+(\d{4}(?:\.[0-9a-f]{4}){2})\s+\w+\s+\d+\s+\w\s+\w\s+([0-9A-Za-z]+)$
我假设:
\d+
相当于\d{1,}
或[0-9]{1,}
,但读取效果更好(imo)\.
来匹配文字.
,因为.
只会匹配任何内容[a-z]{2}
相当于[a-z][a-z]
,但读起来更好(我的意见,再次)\w
来匹配单词字符答案 3 :(得分:0)
这样做:
reobj = re.compile(r"^.*?([\w]{4}\.[\w]{4}\.[\w]{4}).*?([\w]+)$", re.IGNORECASE | re.MULTILINE)
match = reobj.search(subject)
if match:
group1 = match.group(1)
group2 = match.group(2)
else:
result = ""