最初のすべての発音区別符号を取り除くためにunidecodeを使用してから、ちょうど
re.match(r"^e$", unidecode("é"))
それとも、この簡略化された場合に、通常のe
agains一致するだろう所望の目的を達成するための回避策
unidecode("é") == "e"
ユニコード・ライブラリーに依存しない別のソリューションは、ユニコードを保持し、手動でダイアライ
使用unicodedata.normalize()をé
などの確認複合文字がdecompositeフォームe\u301
(ACUTE ACCENTを組み合わせるのE +)
>>> input = "Héllô"
>>> input
'Héllô'
>>> normalized = unicodedata.normalize("NFKD", input)
>>> normalized
'He\u0301llo\u0302'
になって取得すること、(分解用)正規形Dにあなたの入力文字列をオンにする:次のようにチック
次に、カテゴリMark, Nonspacing(短いMn
)に属するすべてのコードポイントを削除します。それらは、幅のないすべての文字で、直前の文字を飾るだけです。 unicodedata.category()を使用してカテゴリを決定します。
>>> stripped = "".join(c for c in normalized if unicodedata.category(c) != "Mn")
>>> stripped
'Hello'
この結果は、上記のunidecode-exampleと同様に、正規表現マッチングのソースとして使用できます。 ここでは関数としてのすべてのことがあります:
def remove_diacritics(text):
"""
Returns a string with all diacritics (aka non-spacing marks) removed.
For example "Héllô" will become "Hello".
Useful for comparing strings in an accent-insensitive fashion.
"""
normalized = unicodedata.normalize("NFKD", text)
return "".join(c for c in normalized if unicodedata.category(c) != "Mn")
Python正規表現は* POSIX文字同値*マッチをサポートしていますか?これは '[= e =]'と同じくらいシンプルですが、大文字と同等のものもあります。これは、 '(?!\ u)'を使ってうまくいく可能性がありますが、これは全てのUnicode文字に対して大文字をサポートする正規表現を必要とします。 – usr2564301