0

「bbig」など、文字列内の 2 つの入力ミスのある文字を置き換える必要があります。ただし、キリル文字ではなく、ラテン文字でのみ機能します。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')

上記のコードは次を返します。

  • ББООЛЛЬЬШШООЙЙ
  • 大きい

私は何を間違えましたか?ご協力いただきありがとうございます。

4

1 に答える 1

2

バイト文字列を使用しています。これにより、使用するすべてのバイトが一致して置換されます。文字を一致させて置き換えたい場合、それは機能しません。

代わりに 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')

これは事前に構成された文字には問題なく機能しますが、結合マークを使用して構成された文字ではうまくいかないことに注意してください。

ユーザーがまさにこの文を入力しようとすると、悲惨なことになります (ヒント: 2 番目の単語を確認してください)。

于 2013-05-24T13:26:15.757 に答える