2017-03-17 75 views
0

我将如何提取从下面的Python字符串编号:Python的正则表达式来提取字从多行字符串

blah:    asdf 
blah:    asdf 
Serial Number:  1234ABCD 
blah    asdf 
blah    asdf 

我曾尝试以下,但它似乎没有奏效:

serial_num = re.search("^Serial Number:\s*(\w*)$", serial_num, re.MULTILINE) 
+1

'打印(re.search( “^序列号:\ S *(\ w *)$”,SERIAL_NUM,re.MULTILINE)。组(1)) '正确提取1234ABCD:无法重现您的问题... –

+0

我通过使用“subprocess.Popen”命令的输出来抓取字符串。也许它不是一个字符串,这就是为什么我无法解压缩它? –

+0

这绝对是一个字符串。我用isinstance(serial_num,str)。我很好奇为什么原始符号不适合我。另外,当我尝试使用“.group(1)”方法时,出现以下错误:“ AttributeError:'NoneType'对象没有属性'group'” –

回答

2

你也许使用下面的正则表达式...

Serial\sNumber.*?(?=\w)(\w+) 

小号ee值regex demo

蟒蛇demo

import re 

s = """ 
blah:    asdf 
blah:    asdf 
Serial Number:  1234ABCD 
blah    asdf 
blah    asdf 
""" 
r = r"Serial\sNumber.*?(?=\w)(\w+)" 
m = re.findall(r, s) 
print(m)[0] 
+0

因此,实际的字符串来自运行以下命令: serial_num = subprocess.Popen([“/ usr/bin/FastCli”,“ - c”,“show version”],stdout = subprocess.PIPE).communicate()[0]。我是通过Arista交换机完成的。我开始怀疑那个子进程命令的输出是不是很干净。我试过你的解决方案,它不适用于该字符串。 –

+0

你能提供一个不起作用的字符串的例子吗? –

+0

哎呀!开关“show version”命令的实际输出使用“序列号”而不是“序列号”。我能够得到这个解决方案的工作。无论出于何种原因,我无法让我的原始正则表达式正常工作。 –

相关问题