第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

正則表達(dá)式用 self 替換

正則表達(dá)式用 self 替換

郎朗坤 2023-09-12 17:31:57
我正在使用正則表達(dá)式來標(biāo)記消息中的信息。這些消息的結(jié)構(gòu)是我要查找的某些信息是有序的。然而,某些消息的順序以及我正在查找的特定信息類型可能會(huì)根據(jù)消息類型而改變。下面是此類消息的一個(gè)最小示例message = 'foo 1234567890 bar'假設(shè)我知道我的消息包含 3 條我正在尋找的信息:var_a、var_b和var_c。我知道 和var_a是var_c小寫字符串,而var_b是數(shù)字,它們按var_a、var_b、 然后var_c在我的消息中的順序出現(xiàn)。我可以使用標(biāo)記它們r(jià) = re.compile('(?P<var_a>[a-z]*)\s+(?P<var_b>[0-9]*)\s+(?P<var_c>[a-z]*)')d = [m.groupdict() for m in r.finditer(message)][0]for key, value in d.items():    message = message.replace(value, f'[{key}]{value}[{key}]')輸出'[var_a]foo[var_a] [var_b]1234567890[var_b] [var_c]bar[var_c]'但是,當(dāng)我的消息中有重復(fù)的單詞時(shí),例如var_a和var_c,即message = 'foo 1234567890 foo'我得到的輸出'[var_a][var_c]foo[var_c][var_a] [var_b]1234567890[var_b] [var_a][var_c]foo[var_c][var_a]'我該如何處理這個(gè)問題?我考慮過在正則表達(dá)式匹配期間立即替換短語(使用類似 re.sub 的東西),但我似乎不知道如何做到這一點(diǎn),因?yàn)槲倚枰軌蛞梦以谖业某绦蛑惺褂玫膬蓚€(gè)名稱正則表達(dá)式(如 var_a 等)以及分配給這些名稱的內(nèi)容。我想獲得的輸出是'[var_a]foo[var_a] [var_b]1234567890[var_b] [var_c]foo[var_c]'這包括空格(或原始消息中的任何其他類型的文本)。
查看完整描述

2 回答

?
米琪卡哇伊

TA貢獻(xiàn)1998條經(jīng)驗(yàn) 獲得超6個(gè)贊

我會(huì)re.sub在這里使用:


message = 'foo 1234567890 bar'

output = re.sub(r'\b([a-z]+) (\d+) ([a-z]+)\b', '[var_a]\\1[var_a] [var_b]\\2[var_b] [var_c]\\3[var_c]', message)

print(output)

這打?。?/p>


[var_a]foo[var_a] [var_b]1234567890[var_b] [var_c]bar[var_c]


查看完整回答
反對(duì) 回復(fù) 2023-09-12
?
POPMUISE

TA貢獻(xiàn)1765條經(jīng)驗(yàn) 獲得超5個(gè)贊

的解決方案re.sub可能更優(yōu)雅,但您也可以使用 來groupdict獲取span各個(gè)組的 ,然后替換它們(相反,因?yàn)樗鼤?huì)改變索引):


m = r.match(message)

msg = list(message)

for k, v in reversed(list(m.groupdict().items())):

    s, e = m.span(k)

    msg[s:e] = list(f"[{k}]{v}[{k}]")


print(''.join(msg))

# '[var_a]foo[var_a] [var_b]1234567890[var_b] [var_c]foo[var_c]'

或者,如果這些組始終僅由空格分隔(并且可以在輸出中用單個(gè)空格替換更多空格),您也可以簡(jiǎn)單地顯示其中的join項(xiàng)目groupdict(順序應(yīng)匹配)。


print(" ".join(f"[{k}]{v}[{k}]" for k, v in m.groupdict().items()))


查看完整回答
反對(duì) 回復(fù) 2023-09-12
  • 2 回答
  • 0 關(guān)注
  • 124 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)