2016-05-02 7 views
-1

私はstring2のに文字列1に一致する正規表現をしたい以下の文字列変数正規表現を使用してasciiとnon asciiをマッチングする方法はありますか?

string1 = "cafe ceramique" 
string2 = "Café Céramique" 

を持っています。

より一般的な方法では、文字列のASCII文字列を、ASCII以外の文字列に正規表現で照合するにはどうすればよいですか?

+2

これまでに何を試みましたか?私たちがあなたを助けることができる[mcve]がありますか? – Francesco

+1

これらのインスタンスを見つける正規表現を作成したい場合、[cC] af [eé] [cC] [eé] ramiqueのようにすることができます。正規表現には、大文字または小文字のいずれかを使用できると説明します。もちろん、より多くのテキストに共通化することもできますが、これはあなたの質問にマッチする正確な答えです。 –

答えて

2
import unicodedata 
string1 == unicodedata.normalize('NFKD', string2).encode('ASCII', 'ignore').decode('ascii') 

例では、単語の最初の文字は異なる場合があります。大文字と小文字を区別しないで一致させたいですか?あなたは文字クラスと大文字小文字を区別しない修飾子を使用でき

+0

forgottonに 'decode'を追加する必要がありました。string1が小文字で、string2が大文字の 'C'を持ちますが、意図したとおりに動作するため、比較結果はfalseになります。 –

+0

私はあなたのソリューションが好きです。 '.lower()'を追加するだけで、正規表現の使用を余儀なくされるのでなければ、OPが尋ねたこととまったく同じだと思います。とにかく私はあなたの答えをupvoteします – Francesco

0

Python

rx = r'caf[eé]\ c[eé]ramique' 

を、完全な例は次のようになります。

import re 
string = """cafe ceramique 
Café Céramique""" 
rx = r'caf[eé]\ c[eé]ramique' 
matches = re.findall(rx,string,re.IGNORECASE) 

a demo on regex101.comを参照してください。
一般に、eは、é,èまたはêを除いて、the ASCII representationと完全に別の文字です。

+0

これは、与えられた例と一般的な非ASCIIテキストの場合にのみ動作します。 –

+0

@RSingh:ほとんどの正規表現は、指定された入力文字列のサブセットに対してのみ機能します... – Jan

関連する問題