2

句読点を削除する最良の方法へのリンクを投稿する前に。

段落内の単語を名詞、副詞、動詞、形容詞などに置き換える madLib ゲームを作成しています。別のファイルからランダムな単語を取得し、適切な段落に出力することになっています。つまり、実行中の動詞は、段落が VERB を示している位置に配置されます。私が抱えている唯一の問題は、置き換える単語の横に句読点があると、これを行うことができないことです。VERB、または VERB!

私の質問は、句読点をそこに置いたまま、これらすべての値をどのように置き換えるかです。

4

5 に答える 5

2

ユースケースはわかりませんがreplacecountパラメーターを 1 に設定すると機能しますか?

>>> test = 'This is a VERB! Whoa, a VERB? Yeah, a VERB!#$%'
>>> test.replace('VERB', 'running', 1)
'This is a running! Whoa, a VERB? Yeah, a VERB!#$%'
>>> test.replace('VERB', 'running', 1).replace('VERB', 'swimming', 1).replace('VERB', 'sleeping', 1)
'This is a running! Whoa, a swimming? Yeah, a sleeping!#$%'

当然、繰り返し回数を調整する必要がありますが、句読点はうまく処理できるはずです。

以下の@mgilsonの提案に従って、次のreplaceようなことを行うことで、への多数の呼び出しを削除できます。

In [14]: s = 'This is a VERB! Whoa, a VERB? Yeah, a VERB!#$%'

In [15]: verbs = ['running', 'jumping', 'swimming']

In [16]: reduce(lambda x, y: x.replace('VERB', y, 1), verbs, s)
Out[16]: 'This is a running! Whoa, a jumping? Yeah, a swimming!#$%'

これは、置換する値としての値を使用して、メイン文字列でreduce実行する関数を使用します。reduce の最後の引数は文字列そのもので、各反復での置換の結果が含まれます (最初は「通常の」文字列になります)。replaceverbs

于 2012-11-20T01:44:01.177 に答える
2
noun1="Donkey"
print("This should print a %s here"%(noun1))

基本的に、入力変数を取得して、この例のように扱うことができます。

于 2012-11-20T01:38:33.680 に答える
0

re モジュールの sub 関数を使用します。単語の後の文字をキャプチャし、その単語を新しい単語に置き換え、後方参照を使用してキャプチャした句読点を追加します。

>>> import re
>>> s = "VERB,"
>>> print re.sub(r'VERB([\,\!\?\;\.]?)', r'newword\1', s)
newword,

文字クラス[\,\!\?\;\.]を拡張して、遭遇することが予想される句読点を含めることができます。これは単なる例です。

于 2012-11-20T02:01:35.893 に答える