2017-03-17 19 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」命令的實際輸出使用「序列號」而不是「序列號」。我能夠得到這個解決方案的工作。無論出於何種原因,我無法讓我的原始正則表達式正常工作。 –

相關問題