簡體   English   中英

Python REGEX匹配字符串並打印

[英]Python REGEX match string and print

得到了以下字符串:

hash=49836EC32432A9B830BECFD66A9B6F936327EAE8

我需要匹配49836EC32432A9B830BECFD66A9B6F936327EAE8所以我需要這樣做:

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

都很酷,但是當我想打印時

print "Hash: %s" % match

我得到Hash: ['C5E8C500BA925237E399C44EFD05BCD4AAF76292']

我究竟做錯了什么? 我需要打印Hash: C5E8C500BA925237E399C44EFD05BCD4AAF76292

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] )。

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

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

這很簡單:

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!!

看起來好像沒有將match的值計為字符串。 我沒有“ mydata”,但是當我將哈希保存為字符串時,它可以很好地打印出來。 好像您沒有將某些內容轉換為字符串,我認為這是match的價值。 我相信引號表示這已被轉換為字符串。 請執行type()以查看其強制轉換,或嘗試在打印語句后鍵入str(match)而不是match。

編輯:

有人指出它正在返回一個數組值。 執行match [0]以返回數組的第一個值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM