正規表現を使用して単語を のグループに分割(vowels, not_vowels, more_vowels)
し、マーカーを使用してすべての単語が母音で始まり母音で終わるようにしたいと考えています。
import re
MARKER = "~"
VOWELS = {"a", "e", "i", "o", "u", MARKER}
word = "dog"
if word[0] not in VOWELS:
word = MARKER+word
if word[-1] not in VOWELS:
word += MARKER
re.findall("([%]+)([^%]+)([%]+)".replace("%", "".join(VOWELS)), word)
この例では、次のようになります。
[('~', 'd', 'o')]
問題は、一致が重複することを望んでいることです-母音の最後のセットが次の一致の最初のセットになる必要があります。これは、正規表現を次のように置き換えると、先読みで可能になるようです。
re.findall("([%]+)([^%]+)(?=[%]+)".replace("%", "".join(VOWELS)), word)
我々が得る:
[('~', 'd'), ('o', 'g')]
つまり、私たちは私が望むものと一致しています。ただし、母音の最後のセットは返されません。私が望む出力は次のとおりです。
[('~', 'd', 'o'), ('o', 'g', '~')]
これは可能だと思います(正規表現が母音の2番目のセットをチェックできる場合、それらを返すことができない理由はわかりません)が、ブルートフォースメソッドを超えてループする方法が見つかりませんそれらを取得し、次の一致の最初の文字を最後の一致に追加し、文字列の最後の文字を最後の一致に追加した後の結果。これを行うためのより良い方法はありますか?
機能する2つのことは、値をキャプチャしながら、先読み値をキャプチャするか、一致するテキストを消費しないことです-どちらの方法も見つかりません。