2013-04-10 7 views
7

फॉर्म में नाम: सीज़र, जूलियस को प्रथम_नाम जूलियस उपनाम सीसर में विभाजित किया जाना है।डाइक्रिटिक्स और लिगचर के साथ पायथन 3 रेगेक्स,

नाम विशेषक हो सकती है (एक é ..), और संयुक्ताक्षर (æ, ओ)

इस कोड को अजगर 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) 

में ठीक काम करने के लिए सभी को छोड़कर यू से मेल खाते हैं लगता है। (नामों में संख्याओं के लिए कोई मिलान नहीं), लेकिन मुझे आश्चर्य है कि गैर अंकों वाले गैर-अंतरिक्ष दृष्टिकोण से बेहतर तरीका नहीं है। हालांकि अधिक महत्वपूर्ण है: मैं पैटर्न को परिशोधित करना चाहता हूं ताकि यह लोअरकेस अक्षरों से राजधानियों को खत्म कर दे, लेकिन पूंजी डाइक्रिटिक्स और लिगरेचर, अधिमानतः रेगेक्स का उपयोग करके भी। जैसे कि ([ए-जेड] [ए-जेड] +), उच्चारण और संयुक्त पात्रों से मेल खाता है।

क्या यह संभव है?

(क्या मैं अब तक देखा है: Dive into python 3 on UTF-8 vs Unicode; यूनिकोड (जो मैं का उपयोग नहीं कर रहा हूँ) पर यह Regex tutorial; मुझे लगता है मैं new regex की जरूरत नहीं है, लेकिन मैं मानता मैं अपने सारे दस्तावेज़ पढ़ नहीं किया है)

+0

क्यों नहीं 'pat = r'^([^,] +), (। *) $ ''? –

+0

@ क्रिस्टियन: क्या वह 'जी @ rd $ tr% m, जो' से भी मेल नहीं खाता? ऐसे समय तक मुझे कलात्मक twitternames पार्स करने की आवश्यकता होगी, मैं नहीं बल्कि। फिर भी। लेकिन आपका शुक्रिया! – RolfBly

उत्तर

3

आप मानक पुस्तकालय के re मॉड्यूल का उपयोग कर अपरकेस और लोअरकेस वर्णों भेद करने के लिए चाहते हैं, तो मुझे डर है कि आप मैन्युअल रूप से सभी प्रासंगिक यूनिकोड कोड पॉइंट्स के एक चरित्र वर्ग का निर्माण करना होगा हूँ।

तुम सच में ऐसा करने की जरूरत नहीं है, तो

[^\W\d_] 

का उपयोग किसी भी यूनिकोड वर्ण से मिलान करने के लिए। यह वर्ण वर्ग किसी भी चीज से मेल खाता है जो "गैर-अल्फान्यूमेरिक कैरेक्टर" नहीं है (जो "अल्फान्यूमेरिक कैरेक्टर" जैसा ही है) जो कि अंक भी नहीं है और न ही अंडरस्कोर है।

+0

इसके लिए बहुत धन्यवाद। मैं [^ \ डब्ल्यू] अस्वीकृत शॉर्टेंड कक्षाओं के बारे में सोच रहा हूं। यह कहते हैं, "एक वर्ग के अंदर इस्तेमाल किया जा सकता है, लेकिन यह भ्रमित है", जनवरी गोवार्ट्स रेगेक्स [संदर्भ] [रेफरी] में। मुझे लगता है कि यह खुद regex से ज्यादा भ्रमित नहीं है। [ref] [http://www.regular-expressions.info/reference.html] – RolfBly

+1

मुझे लगता है कि डबल अस्वीकृति कुछ उपयोग करने में लगती है ... –

संबंधित मुद्दे