web-dev-qa-db-ja.com

文字列の部分文字列をPythonで置き換える

文字列の部分文字列を他のテキストに置き換える最善の方法についていくつかの意見を得たいと思います。次に例を示します。

文字列aがあります。「こんにちは、私の名前は$ nameです」のようなものです。また、別の文字列bがあります。これを文字列aの部分文字列 '$ name'の代わりに挿入します。

置き換え可能な変数がなんらかの方法で示されていると、最も簡単だと思います。ドル記号を使用しましたが、中かっこで区切った文字列、または最も効果的だと思われる文字列を使用できます。

解決策:これを行うことにした方法は次のとおりです。

from string import Template


message = 'You replied to $percentageReplied of your message. ' + 
    'You earned $moneyMade.'

template = Template(message)

print template.safe_substitute(
    percentageReplied = '15%',
    moneyMade = '$20')
22
kwikness

これを行う最も一般的な方法は次のとおりです。

_>>> import string
>>> t = string.Template("Hello my name is $name")
>>> print t.substitute(name='Guido')
Hello my name is Guido

>>> t = "Hello my name is %(name)s"
>>> print t % dict(name='Tim')
Hello my name is Tim

>>> t = "Hello my name is {name}"
>>> print t.format(name='Barry')
Hello my name is Barry
_

string.Template を使用する方法は簡単に習得でき、bashユーザーには馴染みがあるはずです。エンドユーザーへの公開に適しています。このスタイルはPython 2.4で利用可能になりました。

percent-style は、他のプログラミング言語を使用している多くの人々によく知られています。 %(name)sの末尾の「s」が原因で、このスタイルがエラーが発生しやすいと考える人もいます。%演算子は乗算と同じ優先順位を持ち、適用される引数の動作はデータに依存するためですタイプ(タプルとディクテーションは特別な扱いを受けます)。このスタイルは最初からPython=でサポートされています。

中括弧スタイル は、Python 2.6以降でのみサポートされています。これは、最も柔軟なスタイルです(豊富な制御文字のセットを提供し、オブジェクトがカスタムを実装できるようにしますフォーマッタ)。

55

それを行うにはいくつかの方法がありますが、より一般的に使用されるのは、文字列によってすでに提供されている機能を使用する方法です。つまり、_%_演算子を使用することを意味します。より適切なのは、新しく推奨されるstr.format()です。

例:

_a = "Hello my name is {name}"
result = a.format(name=b)
_

またはもっと簡単に

_result = "Hello my name is {name}".format(name=b)
_

位置引数も使用できます。

_result = "Hello my name is {}, says {}".format(name, speaker)
_

または明示的なインデックス:

_result = "Hello my name is {0}, says {1}".format(name, speaker)
_

これにより、format()の呼び出しを変更せずに、文字列のフィールドの順序を変更できます。

_result = "{1} says: 'Hello my name is {0}'".format(name, speaker)
_

フォーマットは本当に強力です。これを使用して、括弧内に何を書き込むかに応じて、フィールドの幅、数値の書き方、およびその他のソートのフォーマットを決定できます。

置換がより複雑な場合は、str.replace()関数、または(reモジュールの)正規表現を使用することもできます。

11
QuantumOmega

実際、これはすでにモジュールに実装されています string.Template

8
filmor

Pythonでreplace()関数をチェックアウトします。ここにリンクがあります:

http://www.tutorialspoint.com/python/string_replace.htm

これは、指定したテキストを置き換えようとするときに役立ちます。たとえば、リンクに次のように表示されます。

str = "this is string example....wow!!! this is really string"
print str.replace("is", "was")

すべての単語について"is"、それはWordに置き換えられます"was"

8
tabchas

次のようなことができます:

"My name is {name}".format(name="Name")

次のように、Pythonでネイティブにサポートされています。

http://www.python.org/dev/peps/pep-3101/

5
pcalcao

%でフォーマットを使用することもできますが、.format()の方がより新しいと考えられています。

>>> "Your name is %(name)s. age: %(age)i" % {'name' : 'tom', 'age': 3}
'Your name is tom'

ただし、通常の%書式設定からわかるように、いくつかの型チェックもサポートしています。

>>> '%(x)i' % {'x': 'string'}

Traceback (most recent call last):
  File "<pyshell#40>", line 1, in <module>
    '%(x)i' % {'x': 'string'}
TypeError: %d format: a number is required, not str
2
User