<p>这段代码应该处理示例中的模式。现在添加<a href="https://en.wikibooks.org/wiki/LaTeX/Special_Characters#Escaped_codes" rel="nofollow">rest of those codes</a>就足够了。把它们放到桌子上就行了。在</p>
<pre><code>#!/usr/bin/python3
import re, unicodedata, sys
table = {
'v': '\u030C',
'c': '\u0327',
"'": '\u0301'
# etc...
}
def despecial(s):
return re.sub(r"\\(" + '|'.join(map(re.escape, table)) + r")\{(\w+)}",
lambda m: m.group(2) + table[m.group(1)],
s)
if __name__ == '__main__':
print(unicodedata.normalize('NFC', despecial(' '.join(sys.argv[1:]))))
</code></pre>
<p>示例:</p>
^{pr2}$
<p>示例(命令行):</p>
<pre><code>$ ./path/to/script.py "Hello W\v{o}rld"
Hello Wǒrld
</code></pre>
<p>它将适当的Unicode组合字符放在给定参数之后。具体地说:U+0301组合锐音符,U+0327组合塞迪拉,U+030C组合抑扬符。如果你想合成字符串,你可以用<a href="https://docs.python.org/2/library/unicodedata.html#unicodedata.normalize" rel="nofollow">^{<cd1>}</a>或其他东西来规范化它。在</p>
<pre><code>>>> import unicodedata
>>> unicodedata.normalize('NFC', despecial(r"H.P. Dembinski, B. K\'{e}gl, I.C. Mari\c{s}, M. Roth, D. Veberi\v{c}"))
'H.P. Dembinski, B. Kégl, I.C. Mariş, M. Roth, D. Veberič'
</code></pre>
<p>也就是说,我相信有更好的方法来处理这件事。看起来你有乳胶密码。在</p>