2016-07-08 135 views
2

我试图从多线串提取以下线的多线串的一部分:提取使用正则表达式

eth6.36 Link encap:Ethernet HWaddr A0:36:9F:5F:24:EE \r\n   inet addr:36.36.36.10 Bcast:36.36.36.255 Mask:255.255.255.0\r\n   inet6 addr: fe80::a236:9fff:fe5f:24ee/64 

当我尝试提取只是eth6.36 Link encap,我得到一个错误。

test = 'ifconfig eth6.36\r\neth6.36 Link encap:Ethernet HWaddr A0:36:9F:5F:24:EE \r\n   inet addr:36.36.36.10 Bcast:36.36.36.255 Mask:255.255.255.0\r\n   inet6 addr: fe80::a236:9fff:fe5f:24ee/64 Scope:Link\r\n   UP BROADCAST MULTICAST MTU:9000 Metric:1\r\n   RX packets:0 errors:0 dropped:0 overruns:0 frame:0\r\n   TX packets:62 errors:0 dropped:0 overruns:0 carrier:0\r\n   collisions:0 txqueuelen:0 \r\n   RX bytes:0 (0.0 b) TX bytes:7004 (6.8 KiB)\r\n\r\n' 

match = re.match('(eth6.36\sLink encap:)', test) 
print match.groups() 
... 
AttributeError: 'NoneType' object has no attribute 'groups' 

有什么想法吗?

+0

哪些错误形成的错误呢?你可以分享吗? – Giordano

+0

@Giordano:由于正则表达式与任何内容都不匹配,所以'match'将会是'None'。然后,下一行会导致'AttributeError',因为'None'没有'groups'属性。我冒昧给这个问题增加了这个问题。 –

回答

0

改为使用findall而不是multiline。你还需要一个量词为\s

>>> re.findall(r'(eth6.36\s+Link encap:)',test, re.M) 
['eth6.36 Link encap:'] 

如果你确信只有一个结果会使用search并取出分组圆括号

>>> re.search(r'eth6.36\s+Link encap:',test).group() 
'eth6.36 Link encap:' 
1

re.match比赛从字符串的开头。使用re.search而是因为它在任何地方的字符串匹配:

>>> match = re.search('(eth6.36\s+Link encap:)', test) 
>>> print match.groups() 
('eth6.36 Link encap:',) 

此外,你必须指定多个空白字符匹配:\s+(注意+)。

1

你要这个,有在正则表达式

import re 
test = 'ifconfig eth6.36\r\neth6.36 Link encap:Ethernet HWaddr A0:36:9F:5F:24:EE \r\n   inet addr:36.36.36.10 Bcast:36.36.36.255 Mask:255.255.255.0\r\n   inet6 addr: fe80::a236:9fff:fe5f:24ee/64 Scope:Link\r\n   UP BROADCAST MULTICAST MTU:9000 Metric:1\r\n   RX packets:0 errors:0 dropped:0 overruns:0 frame:0\r\n   TX packets:62 errors:0 dropped:0 overruns:0 carrier:0\r\n   collisions:0 txqueuelen:0 \r\n   RX bytes:0 (0.0 b) TX bytes:7004 (6.8 KiB)\r\n\r\n' 

match = re.search('(eth6\.36\s*Link encap:)', test) 
print match.groups() 

输出

('eth6.36 Link encap:',) 
+1

我注意到你在搜索正则表达式中排除了点,上面的其他人没有。他们错过了什么吗?这个字符串是否被认为是meta,如果不逃脱? –

+2

他们不会错过任何东西。 '.'替换一个字符。在他们的情况下,它会与'.'本身相匹配(它可以与其他任何东西匹配)。在我的情况下,它正在被'.'完全替代 –