2016-07-16 135 views
1

我有一個字符串,我試圖解析一些標記,通​​常這樣格式化。正則表達式匹配字符串之間的單個字符

'[*]\r\n[list][*][*][/list][*]text[list][*][/list]' 

我想在[名單]標籤內匹配的星號,所以我可以應用re.sub他們爲[**]但我無法形成一個表達式來抓住他們。到目前爲止,我有:

match = re.compile('\[list\].+?\[/list\]', re.DOTALL) 

此獲取列表內的一切,但我不能想出一個辦法來縮小它僅在星號。任何建議將大量讚賞。

+0

我理解它是否正確,並且想匹配'[\ * *] [\ *]'? – DAXaholic

+0

不,我想匹配'*' – mmkm

+0

您可以在替換零件中使用lambda。您只需通過匹配並使用'.replace('*','**')' –

回答

0

您可以使用re.sub並在替換零件中使用lambda。您將匹配傳遞給lambda,並在匹配值上僅使用.replace('*','**')

下面是示例代碼:

import re 
s = '[*]\r\n[list][*][*][/list][*]text[list][*][/list]' 
match = re.compile('\[list].+?\[/list]', re.DOTALL) 
print(match.sub(lambda m: m.group().replace('*', '**'), s)) 
# = > [*] 
#  [list][**][**][/list][*]text[list][**][/list] 

IDEONE demo

注意,一個]之外的字符類的沒有在Python re正則表達式來進行轉義。

+0

這很完美,非常感謝! – mmkm

相關問題