7

次の形式の名前: Ceasar、Julius は First_name Julius Surname Ceasar に分割されます。

名前には発音区別記号 (á à é ..) と合字 (æ、ø) を含めることができます

このコードは Python 3.3 で問題なく動作するようです

import re

def doesmatch(pat, str):  
    try: 
        yup = re.search(pat, str)
        print('Firstname {0} lastname {1}'.format(yup.group(2), yup.group(1)))
    except AttributeError:
        print('no match for {0}'.format(str))

s = 'Révèrberë, Harry'
t = 'Åapö, Renée'
u = 'C3po, Robby'
v = 'Mærsk, Efraïm'
w = 'MacDønald, Ron'
x = 'Sträßle, Mpopo'

pat = r'^([^\d\s]+), ([^\d\s]+)'
# matches any letter, diacritic or ligature, but not digits or punctuation inside the () 

for i in s, t, u, v, w, x:
    doesmatch(pat, i)

あなたを除くすべてが一致します。(名前の数字には一致しません)が、数字以外のスペース以外のアプローチよりも良い方法はないのではないかと思います。ただし、もっと重要なのは、大文字と小文字を区別するようにパターンを改良したいのですが、大文字の分音記号と合字を含め、できれば正規表現も使用することです([AZ][az]+) のように、アクセント付きの文字と組み合わせた文字に一致します。

これは可能ですか?

(これまで見てきたこと: Dive into python 3 on UTF-8 vs Unicode ; This Regex tutorial on Unicode (これは使用していません);新しい正規表現は必要ないと思いますが、持っていないことは認めます。すべてのドキュメントを読む必要はありません)

4

1 に答える 1

4

標準ライブラリのモジュールを使用して大文字と小文字を区別したい場合はre、関連するすべての Unicode コードポイントの文字クラスを手動で作成する必要があります。

本当にこれを行う必要がない場合は、使用してください

[^\W\d_]

Unicode 文字に一致します。この文字クラスは、数字でもアンダースコアでもない「英数字以外の文字」(「英数字」と同じ) に一致します。

于 2013-04-10T21:07:15.150 に答える