すべての行の最初の文字を大文字にしようとしています
次の正規表現を使用しています
ModCon = re.sub('^[a-z]{1}', lambda x: x.upper(), ModCon)
プログラムを実行しても何も起こりません。
アンカーは、入力文字列の最初^
にのみ一致します。各改行の後に一致させたい場合は、re.M
orre.MULTILINE
フラグも指定する必要があります。
ModCon = re.sub('^[a-z]', lambda x: x.group().upper(), ModCon, flags=re.M)
パーツを取り外しました{1}
。これは暗黙的であり、繰り返しインジケータがない場合、文字セットは1文字のみに一致します。
置換関数にはMatch
objectが渡されるため、メソッドを呼び出して一致した文字列を取り出す必要があります.group()
。
ラムダ関数の変数xは文字列型ではありませんが、<type'_sre.SRE_Match'>です。一致する文字列を取得するには、を行う必要がありますcall x.group()
。
したがって(他の回答のヒントも使用して)、次のスクリプトは正常に機能します。
import re
ModCon= "what is your favorite color?\nred"
ModCon = re.sub('^[a-z]', lambda x: x.group().upper(), ModCon, flags=re.M)
print (ModCon)