すべての行の最初の文字を大文字にしようとしています
次の正規表現を使用しています
ModCon = re.sub('^[a-z]{1}', lambda x: x.upper(), ModCon)
プログラムを実行しても何も起こりません。
アンカーは、入力文字列の最初^にのみ一致します。各改行の後に一致させたい場合は、re.Morre.MULTILINEフラグも指定する必要があります。
ModCon = re.sub('^[a-z]', lambda x: x.group().upper(), ModCon, flags=re.M)
パーツを取り外しました{1}。これは暗黙的であり、繰り返しインジケータがない場合、文字セットは1文字のみに一致します。
置換関数にはMatchobjectが渡されるため、メソッドを呼び出して一致した文字列を取り出す必要があります.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)