ASCIIでは、名前を検証することはあまり難しくありません。すべての文字がアルファベット順であることを確認してください。ユニコード名の検証
しかし、Unicode(utf-8)はどうですか?指定した文字列にカンマやアンダースコア(ASCIIスコープ外)がないことを確認するにはどうすればよいですか?
あなたはこの正規表現に対してそれをチェックして行くことができる、「名前」を定義する方法に応じて(理想的にはPythonで)
ASCIIでは、名前を検証することはあまり難しくありません。すべての文字がアルファベット順であることを確認してください。ユニコード名の検証
しかし、Unicode(utf-8)はどうですか?指定した文字列にカンマやアンダースコア(ASCIIスコープ外)がないことを確認するにはどうすればよいですか?
あなたはこの正規表現に対してそれをチェックして行くことができる、「名前」を定義する方法に応じて(理想的にはPythonで)
にフィルタリングするユニコードオブジェクトへの(あなたのUTF-8)と、すべての文字がアルファベットかどうかを確認することができます
s.isalpha()
このメソッドは、ロケールに依存バイト文字列のためです。
:
^\w+$
しかし、これは数字とアンダースコアを許可します。それらを除外するには、
[\d_]
の2番目のテストを行うことができます。これら2つは次のように組み合わせることができます:
^(?:(?![\d_])\w)+$
しかし、正規表現のパフォーマンス上の理由から、私はむしろ2つの別々のチェックを行います。 the docsから
:
\w
LOCALE
とUNICODE
フラグが指定されていない され、任意の 英数字とアンダースコア と一致します。これは セット[a-zA-Z0-9_]
に相当します。LOCALE
では、 は、[0-9_]
と一致し、現在のロケールでは の英数字として定義されている と一致します。UNICODE
が の場合、これは[0-9_]
に加えて、 英数字の英数字の文字と一致します(Unicode文字 プロパティデータベース)。
string
モジュールのletters
プロパティは、必要なものを提供する必要があります。このプロパティはロケール固有のものであるため、渡されるテキストの言語を知っている限り、setlocale()
を使用してこれらの文字に対して検証できます。
http://docs.python.org/library/string.html#module-string
あなたが指摘するように、しかし、真の「ユニコード」の世界で、あなたは言葉を知らない限り、「アルファベット」であるかの文字を知るために、すべての方法はありません。言語がわからない場合は、ASCIIにデフォルト設定するか、共通言語用にロケールを実行します。
おそらくunicodedata moduleがこのタスクに役立ちます。特にcategory()
の機能。既存のユニコードカテゴリについてはunicode.orgをご覧ください。その後、ちょうどバイト文字列を変換するなどの句読点文字
これは解決への第一歩かもしれません:
import unicodedata
EXCEPTIONS= frozenset(u"'.")
CATEGORIES= frozenset(('Lu', 'Ll', 'Lt', 'Pd', 'Zs'))
# O'Rourke, Franklin D. Roosevelt
def test_unicode_name(unicode_name):
return all(
uchar in EXCEPTIONS
or unicodedata.category(uchar) in CATEGORIES
for uchar in unicode_name)
>>> test_unicode_name(u"Michael O'Rourke")
True
>>> test_unicode_name(u"Χρήστος Γεωργίου")
True
>>> test_unicode_name(u"Jean-Luc Géraud")
True
は例外、私はおそらく逃し、さらにチェックを追加します。
あなたは、「どのキャラクターを知っているか知っていることは知りません」と言っています。 unicodedata.category(u "\ u0393")は大文字であることを示します。 – tzot
Unicode文字データベースの一般的なカテゴリプロパティは、この主な特性を決定するのに適していることが多いのですが、多くの文字は言語と文脈によって複数の用途があります。すべてのケースがunicodedata.categoryによってカバーされるわけではありません。カテゴリ() –
http://www.unicode.org/Public/5.1.0/ucd/UCD.html#General_Category_Valuesおよびhttp://www.unicode.org/versions/Unicode5を参照してください。 .0.0/ch04.pdf –