2016-07-16 27 views
1

私はパースしようとしているマークアップの文字列を持っています。文字列間の正規表現に一致する正規表現

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

は、私は[**]としてそれらをre.subことができますので、[リスト]タグ内のアスタリスクをマッチさせたいが、私はそれらをつかむために式を形成するトラブルを抱えています。これまでのところ、私がしている:

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

これは、リスト内のすべてを取得しますが、私は一人でアスタリスクにそれを絞り込むための方法を把握することはできません。どんなアドバイスも大歓迎です。

+0

「[\ *] [\ *]」と一致させたいと思いますか? – DAXaholic

+0

いいえ、 '*'と一致させたい – mmkm

+0

置換部分にラムダを使用することができます。一致する部分を渡して単純な '.replace( '*'、 '**') 'を使用します –

答えて

0

re.subを使用し、交換部品にラムダを使用することができます。あなたはラムダに試合を渡し、一致値には.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] 

は、文字クラスの]外は、Python re正規表現でエスケープする必要がないことをIDEONE demo

注を参照してください。

+0

これは完璧です。 ! – mmkm

関連する問題