2011-06-21 29 views
1

鑑於此re.sub和'替換'功能 - 感謝,Ignacio,爲指針! - 我可以用字符串'* NONSENSE *'替換我非常長的文本塊中的所有匹配 - 迄今爲止,太棒了!Python正則表達式matchobj,如何做一個子串匹配,並將匹配分配給一個變量?

一路上,我想找到的matchobj內,稱這是「findkey」,所以我可以做更多的工作,它...

如何做這個?

data = re.sub('(:::[A-Z,a-z,:]+:::)', replace, data) 

def replace(matchobj): 
if matchobj.group(0) != '': 

    # this seems to work: 
    tag = matchobj.group(1) 

    # but this doesn't: 
    findkey = re.search(':::([A-Z,a-z]+):::', tag) 

    return '******************** NONSENSE ********************' 

else: 
    return '' 
+1

此代碼的工作完全按照我期望它。你想要'findkey'包含什麼?現在它包含一個匹配對象。 – senderle

+0

請注意,我正在嘗試將findkey用於匹配_within_標記。這是一個有效的小組賽。 – DrLou

+0

好,注意。這仍然按預期工作。你是說你想'findkey'來包含substring_嗎?現在,它包含一個包含匹配和所有子組匹配的匹配對象。 – senderle

回答

0

試試這個。您可以將內部部分作爲初始子呼叫的一部分進行匹配。

import re 

data = ":::::::::::BLAH:::::::::, ::::::::MORE:::::::" 

def replace(matchobj): 
    # this seems to work: 
    tag = matchobj.group(0) 
    findkey = matchobj.group(1) 

    print findkey 

    return '******************** NONSENSE ********************' 


data = re.sub(r':::(?P<inner>[A-Z,a-z]+):::', replace, data) 

print data 

返回以下

BLAH 
MORE 
::::::::******************** NONSENSE ********************::::::, :::::******************** NONSENSE ********************:::: 
+0

謝謝,milkypostman - 這真的是我的情況。我一直在試圖將我的多重模式匹配概念「拼湊」爲python代碼。那是祕密之醬。 – DrLou

0

您是否在尋找

findkey = re.search(':::([A-Z,a-z]+):::', tag).group() 

注組(),也this document可以提供幫助。

+0

哇!謝謝Senthil,那太棒了 - 我不知道如何使用group()方法。 我現在可以在日誌條目中看到findkey,但現在有一個新問題;不能用它作爲變量,如下: 'result = plpy.execute(plan3,[fieldid])' – DrLou

+0

我沒有得到那部分。你不能使用字符串作爲變量。您的變量只是標籤,您可以將輸出字符串分配給您的變量。 HTH。 –

相關問題