Python REGEX匹配字符串和打印

时间:2013-05-09 04:57:14

标签: python regex python-2.7

得到以下字符串:

hash=49836EC32432A9B830BECFD66A9B6F936327EAE8

我需要匹配49836EC32432A9B830BECFD66A9B6F936327EAE8所以我这样做:

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

一切都很酷,但是当我想打印时

print "Hash: %s" % match

我得到Hash: ['C5E8C500BA925237E399C44EFD05BCD4AAF76292']

我做错了什么?我需要打印Hash: C5E8C500BA925237E399C44EFD05BCD4AAF76292

5 个答案:

答案 0 :(得分:3)

findall为您提供字符串中所有匹配项的列表。你正好看到了 - 一个列表,其中找到了一个匹配。

请尝试searchhttp://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]以返回数组的第一个值。