擅长:python、mysql、java
<p>您可以使用<a href="http://docs.python.org/2/library/stdtypes.html#str.format" rel="nofollow">^{<cd1>}</a>,假设<code>a</code>不包含格式为<code>{...}</code>的子字符串:</p>
<pre><code>>>> import re
>>> a = 'a[b]cdef[g ]hi[ j]klmno[ p ]'
>>> d = {'b':2,'g':7,'j':10,'p':16}
>>>
>>> re.sub(r'\[\s?(.*?)\s?\]',r'{\1}',a).format(**d)
'a2cdef7hi10klmno16'
</code></pre>
<p>或者您可以使用<code>lambda</code>:</p>
^{pr2}$
<hr/>
<p><code>lambda</code>解决方案似乎要快得多:</p>
<pre><code>>>> from timeit import timeit
>>>
>>> setup = """
... import re
... a = 'a[b]cdef[g ]hi[ j]klmno[ p ]'
... d = {'b':2,'g':7,'j':10,'p':16}
... """
>>>
>>> timeit(r"re.sub(r'\[\s?(.*?)\s?\]',r'{\1}',a).format(**d)", setup)
13.796708106994629
>>> timeit(r"re.sub(r'\[\s?(.*?)\s?\]', lambda m: str(d[m.group(1)]), a)", setup)
6.593755006790161
</code></pre>