改进用于拆分printf格式字符串的正则表达式

时间:2016-02-26 22:13:42

标签: python regex printf

我尝试在regex的帮助下将格式字符串(例如在C函数printf中使用)拆分为其部分。我定义了一个"部分"格式字符串作为说明符的周围环境(以贪婪的方式定义的周围,直到遇到另一个说明符)。例如,格式字符串

My %s is %d!

我想得到两个部分:

  1. My %s is作为说明符%s的环境,在%d阻碍之前以贪婪的方式确定。
  2. %d!作为说明符%d
  3. 的周围环境

    我认为格式字符串是正确的,不必检查其正确性。但是,我必须考虑%%不是说明符,而是用于打印字符%。因此格式字符串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 %%!'
    

    但是对正则表达式不熟悉我很确定它不是一个非常好的或高性能的(例如,这些*看起来很奇怪,但我不能想出更优雅的东西。)

    我非常感谢有关如何改进这种表达的建议。

0 个答案:

没有答案