Got the following string:
hash=49836EC32432A9B830BECFD66A9B6F936327EAE8
I need to match the 49836EC32432A9B830BECFD66A9B6F936327EAE8
so I do:
match = re.findall(".*hash=([A-F0-9]+).*",mydata)
all cool but when I want to print it
print "Hash: %s" % match
I get Hash: ['C5E8C500BA925237E399C44EFD05BCD4AAF76292']
what am I doing wrong? I need to print Hash: C5E8C500BA925237E399C44EFD05BCD4AAF76292
findall
gives you a list of all matches in the string. You are seeing exactly that - a list with the one match it found.
Try search
instead: http://docs.python.org/2/library/re.html#re.search which returns a MatchGroup that you can get the first group of: http://docs.python.org/2/library/re.html#match-objects
Or you could do findall
and use the first entry in the list to print (eg match[0]
).
if match:
print "Hash: %s" % match[0]
In your code, match is a list of strings resulting from the re.findall function ( [1]: http://docs.python.org/2/library/re.html ). In this list, all matches are returned in the order found. In your case, the list only has one element, ie match[0].
It's simple:
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
So in short, change the print line to:
if match:
print "Hash: %s" % match[0] # only first element!!
It looks like it is not counting the value of match as a string. I don't have "mydata", but when I save hash as a string it prints out fine. It looks like you something there is not cast as a string, and I think it's the value of match. The quotes are indicating this has been cast as a string, I believe. Do type() to see what it is cast as, or try typing str(match) instead of match after your print statement.
Edit:
Someone else noted that it is returning an array value. Do match[0] to return the first value of the array.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.