1

すべての行の最初の文字を大文字にしようとしています

次の正規表現を使用しています

ModCon = re.sub('^[a-z]{1}', lambda x: x.upper(), ModCon)

プログラムを実行しても何も起こりません。

4

2 に答える 2

2

アンカーは、入力文字列の最初^にのみ一致します。各改行の後に一致させたい場合は、re.Morre.MULTILINEフラグも指定する必要があります。

ModCon = re.sub('^[a-z]', lambda x: x.group().upper(), ModCon, flags=re.M)

パーツを取り外しました{1}。これは暗黙的であり、繰り返しインジケータがない場合、文字セットは1文字のみに一致します。

置換関数にはMatchobjectが渡されるため、メソッドを呼び出して一致した文字列を取り出す必要があります.group()

于 2013-03-15T11:23:52.760 に答える
1

ラムダ関数の変数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)
于 2013-03-15T11:34:41.387 に答える