<p>在Python中,<a href="https://pypi.python.org/pypi/Unidecode" rel="nofollow noreferrer">^{<cd1>}</a>经常被用来删除重音符号,但它的作用还不止于此:它将<code>'°'</code>转换为<code>'deg'</code>,这可能不是期望的输出。在</p>
<p><a href="https://docs.python.org/2/library/unicodedata.html" rel="nofollow noreferrer">^{<cd4>}</a>似乎有{a3}。在</p>
<h2>有任何图案</h2>
<p>此方法应适用于任何模式和任何文本。在</p>
<p>您可以暂时删除文本和正则表达式模式中的重音符号。来自<a href="https://docs.python.org/3/library/re.html#re.finditer" rel="nofollow noreferrer">^{<cd5>}</a>(起始和结束索引)的匹配信息可用于修改原始的重音文本。在</p>
<p>请注意,为了不修改以下索引,必须反转匹配项。在</p>
<pre><code>import re
import unicodedata
original_text = "I'm drinking a 80° café in a cafe with Chloë, François Déporte and Francois Deporte."
accented_pattern = r'a café|François Déporte'
def remove_accents(s):
return ''.join((c for c in unicodedata.normalize('NFD', s) if unicodedata.category(c) != 'Mn'))
print(remove_accents('äöüßéèiìììíàáç'))
# aoußeeiiiiiaac
pattern = re.compile(remove_accents(accented_pattern))
modified_text = original_text
matches = list(re.finditer(pattern, remove_accents(original_text)))
for match in matches[::-1]:
modified_text = modified_text[:match.start()] + 'X' + modified_text[match.end():]
print(modified_text)
# I'm drinking a 80° café in X with Chloë, X and X.
</code></pre>
<h2>如果模式是一个词或一组词</h2>
<p>你可以:</p>
<ul>
<li>删除模式词中的重音符号,并将其保存在一个集合中以便快速查找</li>
<li>用<code>\w+</code>查找文本中的每个单词</li>
<li>删除单词中的重音符号:
<ul>
<li>如果匹配,则替换为<code>X</code></li>
<li>如果不匹配,请保留该单词不变</li>
</ul></li>
</ul>
<hr/>
^{pr2}$