您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

正则表达式用于Python中的重音不敏感替换

正则表达式用于Python中的重音不敏感替换

unidecode经常被提及用于删除Python中的重音符号,但它的作用还不止于此:它将转换'°''deg',这可能不是所需的输出

unicodedata似乎具有消除口音的功能

方法应适用于任何模式和任何文本。

您可以从文本和正则表达式模式中暂时删除重音。来自re.finditer()(开始和结束索引)的匹配信息可用于修改原始的带重音符号的文本。

请注意,必须颠倒匹配项才能不修改以下索引。

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.

你可以 :

import re
from unidecode import unidecode

original_text = "I'm drinking a café in a cafe with Chloë."

def remove_accents(string):
    return unidecode(string)

accented_words = ['café', 'français']

words_to_remove = set(remove_accents(word) for word in accented_words)

def remove_words(matchobj):
    word = matchobj.group(0)
    if remove_accents(word) in words_to_remove:
        return 'X'
    else:
        return word

print(re.sub('\w+', remove_words, original_text))
# I'm drinking a X in a X with Chloë.
python 2022/1/1 18:50:06 有724人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶