2017-09-22 2 views
2

アルファベット以外の文字グループを挿入することで、隣接する2つの母音と単語を分離しようとしています。 re.sub()に空でない置換を使用すると、結果は挿入を示しますが、挿入は次の文字を "食べた"ように見えます。re.sub()は空ではない置換をPythonの次の文字に置き換えます

はここ

import = re 

word = "aorta" 

re.sub('(?<=[AEOUaeouy])(?:[aeoui])', '[=]', word) 
#actual output => 'a[=]r[=]ta' 
#expected output => 'a[=]or[=]ta' 

はなぜ挿入、次の文字はあなたがなしで、いくつかの文字の存在のためにのみチェックpositive lookahead(非消費するパターンを使用する必要がありますか?

+0

キャプチャしていないグループ - '(?:[aeoui])'> '(?= [aeoui])'となります。ところで、なぜa [=]か[=] taが期待されますか? –

+0

お前、そうだよ!ありがとう!これを回答として使用すると、私はそれを受け入れます。 –

+0

あなたの期待する結果は 'a [=] orta'でしょうか? ''アウアウイー 'は 'r'を含んでいません –

答えて

2

を食べている「例です実際にはマッチ値に加算する)ではなく、非キャプチャグループ(マッチした文字をre.subに置き換えた消費パターン)ではなく、

import re 
word = "aorta" 
print(re.sub('([AEOUaeouy])(?=[aeoui])', r'\1[=]', word)) 
# => a[=]orta 

Python demoを参照してください。

注:あなたは、'a[=]or[=]ta'を取得後読み文字クラス、[AEOUaeouy] =>[AEOUaeouyr]rを追加したい場合。

詳細

  • ([AEOUaeouy]) - グループ1:パターン
  • (?=[aeoui])で定義された文字のいずれか -
  • \1文字クラスの文字が続く位置 - で置換パターンは、グループ1で取り込んだ値を挿入します。
関連する問題