正则表达式有助于匹配组

时间:2014-04-15 18:59:28

标签: python regex

我正在尝试编写一个正则表达式来匹配具有多行的文本文件,例如:

* 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/

有人可以指出我在这里做的任何明显错误。

谢谢, 〜新手

4 个答案:

答案 0 :(得分:2)

试试这个:

^\* [0-9]{3} +([0-9]{4}.[0-9a-z]{4}.[0-9a-z]{4}).*(Veth[0-9]{4})$

Regular expression visualization

Debuggex Demo

第一部分是捕获组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]+)$

Regular expression visualization

Debuggex Demo

我假设:

  • 列将完全相同,
  • 您的第一个匹配组包含一组十进制数字和两组小写十六进制数字
  • ,最后一个字可以是任何东西。

一些注释:

  • \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 = ""