Python で文字列を変数に変換またはフォーマット解除する (format() のように、ただし逆) 質問する

Python で文字列を変数に変換またはフォーマット解除する (format() のように、ただし逆) 質問する

Version 1.4.0\nおよび という形式の文字列がありVersion 1.15.6\n、そこから 3 つの数値を簡単に抽出したいです。format メソッドを使用して文字列に変数を入れることができることはわかっています。基本的には、次のように逆順に実行したいと思います。

# So I know I can do this:
x, y, z = 1, 4, 0
print 'Version {0}.{1}.{2}\n'.format(x,y,z)
# Output is 'Version 1.4.0\n'

# But I'd like to be able to reverse it:

mystr='Version 1.15.6\n'
a, b, c = mystr.unformat('Version {0}.{1}.{2}\n')

# And have the result that a, b, c = 1, 15, 6

私が見つけた他の誰かが同じ質問をしていましたが、返答は彼らの特定のケースに特有のものでした。解析にはPythonフォーマット文字列を逆順に使用します

一般的な回答(逆のやり方format())があれば嬉しいです。ただし、私の特定のケースに関する回答も非常に役立ちます。

ベストアンサー1

ただ構築するためウチェの答え, 私は、k​​wargs を使用したパターンを介して文字列を反転する方法を探していました。そこで、次の関数を作成しました。

def string_to_dict(string, pattern):
    regex = re.sub(r'{(.+?)}', r'(?P<_\1>.+)', pattern)
    values = list(re.search(regex, string).groups())
    keys = re.findall(r'{(.+?)}', pattern)
    _dict = dict(zip(keys, values))
    return _dict

次のように動作します:

>>> p = 'hello, my name is {name} and I am a {age} year old {what}'

>>> s = p.format(name='dan', age=33, what='developer')
>>> s
'hello, my name is dan and I am a 33 year old developer'
>>> string_to_dict(s, p)
{'age': '33', 'name': 'dan', 'what': 'developer'}

>>> s = p.format(name='cody', age=18, what='quarterback')
>>> s
'hello, my name is cody and I am a 18 year old quarterback'
>>> string_to_dict(s, p)
{'age': '18', 'name': 'cody', 'what': 'quarterback'}

おすすめ記事