【问题标题】:Python letters duplicates replace in Unicode stringPython字母重复替换Unicode字符串
【发布时间】:2013-05-24 13:21:57
【问题描述】:

我需要替换字符串中的两个输入错误的字母,例如“bbig”。但它仅适用于拉丁字母,不适用于西里尔字母。我在 Centos Linux 下使用 Python 2.6.6 版本。

#!/usr/bin/python
# -*- coding: utf-8 -*-
import re
def reg(item):
  item = re.sub(r'([A-ZА-ЯЁЄЇІ])\1', r'\1', item, re.U)
  #this work only with latin too
  #item = re.sub(r'(.)\1', r'\1', item, re.U)
  return item

print reg('ББООЛЛЬЬШШООЙЙ')
print reg('BBIIGG')

上面的代码返回:

  • ББООЛЛЬЬШШООЙЙ

我做错了什么?感谢您的帮助。

【问题讨论】:

  • 你是这个意思吗? u'ББООЛЛЬЬШШООЙЙ' 无差别输出相似
  • 您的代码如何区分合法的双字母和拼写错误的?

标签: python regex unicode duplicates cyrillic


【解决方案1】:

您正在使用字节字符串。这使您使用的所有内容都匹配并替换字节。如果您想匹配和替换字母,那将无法正常工作。

改用 unicode 字符串:

#!/usr/bin/python
# -*- coding: utf-8 -*-
import re
def reg(item):
  item = re.sub(ur'([A-ZА-ЯЁЄЇІ])\1', r'\1', item, re.U)
  #this work only with latin too
  #item = re.sub(r'(.)\1', r'\1', item, re.U)
  return item

print reg(u'ББООЛЛЬЬШШООЙЙ')
print reg(u'BBIIGG')

请注意,这对预先组合的字符很有效,但对于使用组合标记组合的字符则效果不佳。

如果用户试图输入这句话,也将是灾难性的(提示:检查它的第二个单词)。

【讨论】:

  • 对不起,我在想象
猜你喜欢
  • 2020-04-13
  • 2017-02-18
  • 2016-06-06
  • 1970-01-01
  • 2018-12-12
  • 1970-01-01
  • 2015-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多