我尝试在regex的帮助下将格式字符串(例如在C函数printf
中使用)拆分为其部分。我定义了一个"部分"格式字符串作为说明符的周围环境(以贪婪的方式定义的周围,直到遇到另一个说明符)。例如,格式字符串
My %s is %d!
我想得到两个部分:
My %s is
作为说明符%s
的环境,在%d
阻碍之前以贪婪的方式确定。%d!
作为说明符%d
我认为格式字符串是正确的,不必检查其正确性。但是,我必须考虑%%
不是说明符,而是用于打印字符%
。因此格式字符串My %s is %d %%!
只会产生两个部分My %s is
和%d %%!
。
我想出了一个正则表达式(另见regex101.com),这似乎有效:
reg="((([^%]*(%%)*)*)(%[^%])(([^%]*(%%)*)*))"
a=re.findall(reg, "My %s is %d %%!")
>>> a[0][0]
'My %s is '
>>> a[1][0]
'%d %%!'
但是对正则表达式不熟悉我很确定它不是一个非常好的或高性能的(例如,这些*
看起来很奇怪,但我不能想出更优雅的东西。)
我非常感谢有关如何改进这种表达的建议。