0

Drupalサイトに用語のリストがあります:

  • 美術
  • 動物
  • スポーツ

これらの用語を正規表現でフィルタリングする必要があり、式は日本語の用語(アート、毒)に対してのみtrueと評価される必要があります。

次の条件が当てはまります。

  • すべての英語の用語は、大文字と小文字のみで構成されます。
  • すべての日本語の用語は、日本語の文字(漢字とかな)のみで構成されます。

以前にいくつかの正規表現を作成しましたが、Unicodeの処理方法がわかりません。のような表現[a-zA-Z]*は、日本語を含むすべての用語を取得します。

4

1 に答える 1

1

ここで範囲を使用する:http://en.wikipedia.org/wiki/Japanese_writing_system

>>> import re
>>> kanji = map(unichr, range(0x4e00, 0x9fbf + 1))
>>> katakana = map(unichr, range(0x30a0, 0x30ff + 1))
>>> hiragana = map(unichr, range(0x3040, 0x309f + 1))
>>> japanese = ''.join(kanji + katakana + hiragana)
>>> pattern = r'^[%s\s]+$' % japanese
>>> re.compile(pattern, re.U).match('スポーツ'.decode('utf8'))
<_sre.SRE_Match object at 0x9e6a090>
>>> re.compile(pattern, re.U).match('スポーツtest'.decode('utf8'))
>>>

もちろんこれはPythonです。うまくいけば、選択した言語に合わせて変更できます。

おそらく重要なのは、アンカー^と$を使用して、文字列全体が一致していることを確認することです。[a-zA-Z] *がすべての用語に一致する理由は、「*」が「0以上」を意味するためです。また、UTF-8にエンコードされている場合は一致しないため、入力文字列は必ずデコードしてください。この場合、正規表現エンジンに\ w、\ W、\ b、\ Bを決定するように要求していないため、「U」フラグは実際には必要ありません。

また、質問を読み直した後、入力にスペースが含まれることはないので、正規表現の「\s」を取り除くことができます。

于 2012-05-08T03:12:10.830 に答える