Die Formatfelder sind nur für den Operator %
relevant, nicht für die Zeichenfolge selbst. Es gibt also kein Attribut wie str.__format_fields__
, auf das Sie zugreifen können, um die Feldnamen zu erhalten.
Ich würde sagen, dass die Verwendung von Regex in diesem Fall eigentlich der richtige Ansatz ist. Sie können re.findall
leicht die Namen zu extrahieren:
>>> import re
>>> x = "hello %(foo)s there %(bar)s"
>>> re.findall('(?<!%)%\(([^)]+)\)[diouxXeEfFgGcrs]', x)
['foo', 'bar']
>>>
Im Folgenden finden Sie eine Erklärung der Muster:
(?<!%) # Negated look-behind to make sure that we do not match %%
% # Matches %
\( # Matches (
( # Starts a capture group
[^)]+ # Matches one or more characters that are not)
) # Closes the capture group
\) # Matches)
[diouxXeEfFgGcrs] # Matches one of the characters in the square brackets
Es ist [sehr einfach] (https://docs.python.org/2/library/string.html#string.Formatter), wenn Sie zur neuen Formatvorlage wechseln können. –
nicht wirklich eine Option, leider – qhfgva