我需要檢查一個變量是否爲正則表達式匹配對象。檢查一個變量是否爲SRE_Match
print(type(m))
回報類似的東西:<_sre.SRE_Match object at 0x000000000345BE68>
,但是當我輸入_sre
並嘗試執行type(m) is SRE_Match
異常NameError: name 'SRE_Match' is not defined
提高。
我需要檢查一個變量是否爲正則表達式匹配對象。檢查一個變量是否爲SRE_Match
print(type(m))
回報類似的東西:<_sre.SRE_Match object at 0x000000000345BE68>
,但是當我輸入_sre
並嘗試執行type(m) is SRE_Match
異常NameError: name 'SRE_Match' is not defined
提高。
您可以在程序的開始做
SRE_MATCH_TYPE = type(re.match("", ""))
,然後
type(m) is SRE_MATCH_TYPE
每次
要作出比較。
是的,我試過這種方法,它工作正常但它看起來很髒)) –
是嗎?除了你只需要運行一次的行之外,它不是特別多於你的'type(m)是SRE_Match'解決方案的字符。當你嘗試做一些不尋常的事情時(把正則表達式結果混合到一個包含許多其他類型值的字典中),你的代碼有時也需要有點不同尋常。 –
「髒」並不意味着「更多的代碼行」或「不尋常的」)) –
你可以做這樣的事情
isinstance(m, type(re.match("","")))
通常沒有必要檢查匹配對象的類型,所以沒有人已經不屑於做一個很好的辦法做到這一點
這將在* every *'isinstance'查詢上進行匹配... – nneonneo
@nneonneo,如果您經常使用它,將其分配給變量確實不難了 –
由於type(m)
回報打印的表示我會用:
repr(type(m)) == "<type '_sre.SRE_Match'>"
,所以你不必導入_sre
模塊,並沒有做任何額外match
電話。
這是爲Python 2.它似乎比在Python 3中類型(m)的結果是不同的,像<_sre.SRE_Match object at 0x000000000345BE68>
。如果是這樣,我想你可以使用:
repr(type(m)).startswith("<_sre.SRE_Match")
或類似的東西(我沒有在手的Python 3的解釋,現在,這樣的答案,這部分可能不準確)。
樁上,因爲有辦法解決這個問題一大堆:
def is_match_obj(m):
t = type(m)
return (t.__module__, t.__name__) == ('_sre', 'SRE_Match')
通常你只能從功能匹配的對象,要麼返回'None'或匹配對象......有啥只是測試'None'的問題? – nneonneo
我有一個字典,其中包含不同類型的值,並根據值類型需要執行不同的操作。 –
難看的數據結構與難看的代碼攜手並進 –