2017-08-30 69 views
-2

我是新来的正则表达式,想知道如何当列的内容并不总是相似正则表达式在Python中多

O/P画面中的链接,更好地理解

取第3列的值

enter image description here

SW1-TB100#SH MOD

国防部端口的模块型模型状态


1 34 1/10/40G IPS,2/4/8/10/16G FC模块DS-X9334-K9 OK

2 48 1/10 Gbps以太网模块DS-X9848-480K9 OK

5 0 Supervisor模块-3 DS-X97-SF1-K9活动*

回答

0

您可以发布表格的txt格式。

re.findall("(\d{1,2}?) +(\d{1,2}?) +(.*?) +(.+?\s\w+\w+?) +(.*\-?) +(\w+)", "your_input_file") 

以上将匹配您的第一个2行:

========================================================== 
1 34 1/10/40G IPS,2/4/8/10/16G FC Module DS-X9334-K9 ok 

2 48 1/10 Gbps Ethernet Module DS-X9848-480K9 ok 
========================================================== 

您也可以参考以下链接

python regular expression across multiple lines

+0

感谢您的建议。但第三列值有空间。正则表达式会打破这个不同的值 – Aftab

+0

>>> a =“1 34 1/10/40G IPS,2/4/8/10/16G FC模块DS-X9334-K9 ok” >>> re.findall “(\ d {1,2}?)+(\ d {1,2}?)+(。*?)+(。+?\ s \ w + \ w +?)+(。* \ - ? ('w'),a) [('1','34','1/10/40G','IPS,2/4/8/10/16G FC','模块DS-X9334-K9' ,'ok')] >>> – Aftab

0

相反的正则表达式,你可以尝试用简单的下面字符串拆分操作。

line = "1 34 1/10/40G IPS,2/4/8/10/16G FC Module DS-X9334-K9 ok" 
print " ".join(line.split()[2:-2]) 

你可以把它放在一个循环中对所有行重复它。

编辑1:

您可以使用下面的方法用星号删除问题无论是。再次,如果日志中有其他特殊情况,您可能需要调整它。

print " ".join(str2.replace("*","").split()[2:-2]) 
print " ".join(str2.split("DS")[0].split()[2:]) 
+0

感谢您的建议。它适用于前3行。 有一个问题,有时候这行会以星号(第4行)结尾作为该行的额外一列,它将不会分裂 >>> line =“5 0 Supervisor模块-3 DS-X97-SF1 -K9激活*“ >>> print”“.join(line.split()[2:-2]) Supervisor模块-3 DS-X97-SF1-K9 – Aftab

+0

我可以看到许多方法来解决这个问题。您可以执行替换操作以删除星号,或者您可以使用“DS-”进行分割,因为第4列似乎总是以“DS-”开头。您可能需要稍微调整一下,因为我没有完整的日志输出。 – akhilc