2013-05-09 110 views
1

得到了下面的字符串:Python的正則表達式匹配的字符串和打印

hash=49836EC32432A9B830BECFD66A9B6F936327EAE8 

我需要的49836EC32432A9B830BECFD66A9B6F936327EAE8匹配,所以我做的:

match = re.findall(".*hash=([A-F0-9]+).*",mydata) 

都很酷,但是當我要打印

print "Hash: %s" % match 

我得到Hash: ['C5E8C500BA925237E399C44EFD05BCD4AAF76292']

我做錯了什麼?我需要打印Hash: C5E8C500BA925237E399C44EFD05BCD4AAF76292

回答

3
if match: 
    print "Hash: %s" % match[0] 
0

看起來它不會將匹配的值作爲字符串計數。我沒有「mydata」,但是當我將hash保存爲一個字符串時,它的打印效果很好。它看起來像你沒有投入的字符串,我認爲這是匹配的價值。我相信,這些引號表明這已經被鑄成了一個字符串。輸入()以查看它被轉換爲什麼,或者在打印語句後嘗試輸入str(match)而不是match。

編輯:

其他人指出,它正在返回一個數組值。匹配[0]返回數組的第一個值。

2

在代碼中,匹配是由re.findall函數得到的字符串的列表([1]:http://docs.python.org/2/library/re.html)。在此列表中,所有匹配都以找到的順序返回。在你的情況下,列表只有一個元素,即match [0]。

2

很簡單:

In[1]: import re 

In[2]: mydata = 'hash=49836EC32432A9B830BECFD66A9B6F936327EAE8' 

In[3]: re.findall(".*hash=([A-F0-9]+).*",mydata) 
Out[3]: ['49836EC32432A9B830BECFD66A9B6F936327EAE8'] # a list 

In[4]: re.match(".*hash=([A-F0-9]+).*",mydata) 
Out[4]: <_sre.SRE_Match at 0x5d79020> 

In[5]: re.match(".*hash=([A-F0-9]+).*",mydata).groups() 
Out[5]: ('49836EC32432A9B830BECFD66A9B6F936327EAE8',) # a tuple 

In[6]: match = Out[3] 

In[7]: print "Hash:",match[0] # so print the first item!!! 
Hash: 49836EC32432A9B830BECFD66A9B6F936327EAE8 

因此,在短期,打印線更改爲:

if match: 
    print "Hash: %s" % match[0] # only first element!!