得到以下字符串:
hash=49836EC32432A9B830BECFD66A9B6F936327EAE8
我需要匹配49836EC32432A9B830BECFD66A9B6F936327EAE8
所以我这样做:
match = re.findall(".*hash=([A-F0-9]+).*",mydata)
一切都很酷,但是当我想打印时
print "Hash: %s" % match
我得到Hash: ['C5E8C500BA925237E399C44EFD05BCD4AAF76292']
Hash: C5E8C500BA925237E399C44EFD05BCD4AAF76292
答案 0 :(得分:3)
findall
为您提供字符串中所有匹配项的列表。你正好看到了 - 一个列表,其中找到了一个匹配。
请尝试search
:http://docs.python.org/2/library/re.html#re.search返回一个MatchGroup,您可以获得第一组:http://docs.python.org/2/library/re.html#match-objects
或者您可以执行findall
并使用列表中的第一个条目进行打印(例如match[0]
)。
答案 1 :(得分:3)
if match:
print "Hash: %s" % match[0]
答案 2 :(得分:2)
在你的代码中,match是re.findall函数([1]:http://docs.python.org/2/library/re.html)产生的字符串列表。在此列表中,将按找到的顺序返回所有匹配项。在您的情况下,列表只有一个元素,即匹配[0]。
答案 3 :(得分: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!!
答案 4 :(得分:0)
看起来它没有将match的值计为字符串。我没有“mydata”,但是当我将哈希保存为字符串时,它打印出来就很好了。看起来你的东西没有作为一个字符串,我认为这是匹配的价值。我相信这些引号表明这已被演员为字符串。请键入()以查看它的内容,或者在print语句后尝试键入str(匹配)而不是匹配。
编辑:
其他人注意到它返回了一个数组值。匹配[0]以返回数组的第一个值。