Regex帮助匹配组

2024-06-26 00:16:11 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

有人能指出我在这里犯的任何明显的错误吗。你知道吗

谢谢你, ~菜鸟


Tags: 目的comhttpwww错误staticdynamic文本文件
3条回答

试试这个:

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

Regular expression visualization

Debuggex Demo

第一部分是第一组,第二组是“兽医”代码。你知道吗


请考虑为Stack Overflow Regular Expressions FAQ添加书签以供将来参考。在底部有一个在线测试人员的列表。你知道吗

非常严格的版本如下所示:

^\*\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来匹配单词字符

我认为你不需要正则表达式:

for line in open('myfile','r').readlines():
    fields = line.split( )
    print "\n" + fields[1] + "\n" +fields[6]   

相关问题 更多 >