Python正規表現におけるマルチライン処理
マルチライン文字列を扱う際の正規表現には特有の注意点があります。 以下の例のように、通常の文字、改行文字、タブ文字を含む文字列を使って詳しく見ていきましょう。
txt = '''111
222
333
444'''
改行文字
改行文字は '\n' パターンでマッチさせることができます。
res = re.sub('\n', '!', txt)
print(res)
実行結果は以下のようになります(行間のスペースはタブ文字です)。
'111! 222! 333! 444'
タブ文字
タブ文字は '\t' パターンでマッチさせることができます。
res = re.sub('\t', '!', txt)
print(res)
コードの実行結果:
'''
!111
!222
!333
!444
'''
ドットの動作
マルチラインモードでは、パターン '.' は改行文字をマッチしません。
res = re.sub('.', '!', txt)
print(res)
コードの実行結果:
'''
!!!
!!!!
!!!!
!!!!
'''
任意の文字(すべての文字)
マルチライン文字列内のすべての文字(改行文字を含む)をマッチさせるには、[\s\S] という組み合わせを使います。この構文は、通常の文字と改行文字の両方を検索します。
res = re.sub('[\s\S]', '!', txt)
print(res)
コードの実行結果:
'!!!!!!!!!!!!!!!!!!'
ドル記号
マルチラインモードでは、パターン '
は各行の末尾にマッチします。
res = re.sub('
', '!', txt)
print(res)
コードの実行結果:
'''
111!
222!
333!
444!
'''
実践問題
以下の文字列が与えられます:
'''
abc
def
ghi
jkl
'''
この文字列を以下のように変換する正規表現を書いてください。
'''
abc!
def!
ghi!
jkl!
'''
以下の文字列が与えられます:
'''
abc
def
ghi
jkl
'''
この文字列を以下のように変換する正規表現を書いてください。
'''
! abc
! def
! ghi
! jkl
'''
以下の文字列が与えられます:
'''
abc
def
ghi
jkl
'''
この文字列を以下のように変換する正規表現を書いてください。
'''!
abc
def
ghi
jkl
!'''
以下の文字列が与えられます:
'''
abc
def
ghi
jkl
'''
この文字列を以下のように変換する正規表現を書いてください。
'''!
! abc
! def
! ghi
! jkl
!'''
以下の文字列が与えられます:
'''
abc
def
ghi
jkl
'''
この文字列を以下のように変換する正規表現を書いてください。
'''!
abc!
def!
ghi!
jkl!
!'''
以下の文字列が与えられます:
'''
abc
def
ghi
jkl
'''
この文字列を以下のように変換する正規表現を書いてください。
'''
!abc
!def
!ghi
!jkl
'''