2

私はこれをやろうとしています:

val = re.sub(r'\b' + u_word +'\b', unicode(new_word), u_text)

(すべての文字列は非ラテン語です。)

まったく機能しません。

非ラテン語テキストの非ラテン語 (単語全体) を正規表現で検索置換することは可能ですか? どのように?

編集:

テストしたい場合は、次の文字列を試してください。

>>> u_word = u'αβ'
>>> u_text = u'αβγ αβ αβγδ δαβ'
>>> new_word = u'χχ'
>>> val = re.sub(r'\b' + u_word +r'\b', unicode(new_word), u_text)
>>> val
u'\u03b1\u03b2\u03b3 \u03b1\u03b2 \u03b1\u03b2\u03b3\u03b4 \u03b4\u03b1\u03b2'
>>> u_text
u'\u03b1\u03b2\u03b3 \u03b1\u03b2 \u03b1\u03b2\u03b3\u03b4 \u03b4\u03b1\u03b2'
>>> 
4

1 に答える 1

1

次のように、re.UNICODEフラグをに渡す必要があります。sub

val = re.sub(r'\b' + u_word + r'\b', unicode(new_word), u_text, flags=re.UNICODE)

\b単語境界です。re.UNICODEフラグがない場合、「単語」には set の文字のみが含まれる[a-zA-Z0-9_]ためαβ、「単語」とは見なされません。詳細についてはreドキュメントを参照してください(具体的\bには、、、\wおよびre.UNICODE)。

ご参考までに:

  • new_wordすでにユニコード文字列である場合(例のように)、不要unicode(new_word)な場合は unmodified を返しますnew_word
  • Python 3.x では、ユニコードは特別なケースではなくなりました。あなたのコードは、Python 3.x でそのまま動作していたはずです (unicode()不要になったため削除されたことを除けば)。
于 2012-12-06T21:07:01.600 に答える