11

ユーザー指定の形式を使用してファイルの名前を変更するクラスを作成しています。この形式はstr.format、空白を埋めるためにメソッドが呼び出される単純な文字列になります。

私の手順では、中括弧に含まれる変数名を抽出する必要があることがわかりました。たとえば、文字列には、が含まれている場合があります。{user}これにより、が生成されuserます。もちろん、1つの文字列には複数の括弧のセットがあり、それぞれの内容を表示順に取得してリストに出力する必要があります。

したがって、"{foo}{bar}"を生成する必要があり['foo', 'bar']ます。

これを行う最も簡単な方法はを使用することre.splitだと思いますが、正規表現については何も知りません。誰かが私を助けることができますか?

前もって感謝します!

4

2 に答える 2

60

もう1つの可能性は、Pythonの実際のフォーマッター自体を使用してフィールド名を抽出することです。

>>> import string
>>> s = "{foo} spam eggs {bar}"
>>> string.Formatter().parse(s)
<formatteriterator object at 0x101d17b98>
>>> list(string.Formatter().parse(s))
[('', 'foo', '', None), (' spam eggs ', 'bar', '', None)]
>>> field_names = [name for text, name, spec, conv in string.Formatter().parse(s)]
>>> field_names
['foo', 'bar']

または(短くても情報量が少ない):

>>> field_names = [v[1] for v in string.Formatter().parse(s)]
>>> field_names
['foo', 'bar']
于 2012-12-27T21:58:30.580 に答える
18

使用re.findall()

In [5]: import re

In [8]: strs = "{foo} spam eggs {bar}"

In [9]: re.findall(r"{(\w+)}", strs)
Out[9]: ['foo', 'bar']
于 2012-12-27T21:48:25.170 に答える