Python 单独使用时更换商标符号(™;)

Python 单独使用时更换商标符号(™;),python,regex,Python,Regex,我正在尝试删除商标符号(™) 但只有在这种情况下,它后面没有任何其他符号,例如,我可能有“欧元”™ 这是引号(')的错误编码,所以我不想删除商标符号(™) 所以我用这个模式来代替xx™ 带引号 dict = {}; chars = { '\xe2\x84\xa2': '', # ™ '\xe2\x80\x99': "'", # ’ } def stats_change(char, number): if dict.has_key(char):

我正在尝试删除商标符号(™) 但只有在这种情况下,它后面没有任何其他符号,例如,我可能有“欧元”™ 这是引号(')的错误编码,所以我不想删除商标符号(™) 所以我用这个模式来代替xx™ 带引号

dict = {};

chars = {
    '\xe2\x84\xa2': '', # ™
    '\xe2\x80\x99': "'", # ’
        }

def stats_change(char, number):
  if dict.has_key(char):
    dict[char] = dict[char]+number
  else:
    dict[char] = number # Add new entry

def replace_chars(match):
  char = match.group(0)
  stats_change(char,1)

  return chars[char]

i, nmatches = re.subn("(\\" + '|\\'.join(chars.keys()) + ")", replace_chars, i)
count_matches += nmatches
输入:
foo™ oof

输出:
fooof

输入:
o€™f oof

输出:
o'f oof


有什么建议吗?

在运行正则表达式之前执行“修复编码问题”以删除TM,这样问题就不会发生。否则,您需要检查TM可能导致正则表达式变长的编码错误的所有可能方式。您可能需要
re.sub(r'™\b |\b™', '', s) 
您可能会发现ftfy很有用:在运行regex删除TM之前执行“修复编码问题”,问题就不会发生。否则,您需要检查TM可能出现编码错误的所有可能方式,这可能会导致regex变长。您可能需要
re.sub(r'™\b |\b™', '', s) 
您可能会发现ftfy很有用: