2012-01-19 7 views
21

मैं एक स्ट्रिंग है जहाँ से मैं 3 समूहों को निकालने के लिए चाहते हैं:मिलान केवल पायथन में एक यूनिकोड पत्र फिर से

'19 janvier 2012' -> '19', 'janvier', '2012' 

महीने का नाम गैर ASCII वर्ण सकता है, इसलिए [A-Za-z] मेरे लिए काम नहीं करता है:

>>> import re 
>>> re.search(ur'(\d{,2}) ([A-Za-z]+) (\d{4})', u'20 janvier 2012', re.UNICODE).groups() 
(u'20', u'janvier', u'2012') 
>>> re.search(ur'(\d{,2}) ([A-Za-z]+) (\d{4})', u'20 février 2012', re.UNICODE).groups() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: 'NoneType' object has no attribute 'groups' 
>>> 

मैं \w इस्तेमाल कर सकते हैं लेकिन यह अंक से मेल खाता है और रेखांकित:

>>> re.search(ur'(\w+)', u'février', re.UNICODE).groups() 
(u'f\xe9vrier',) 
>>> re.search(ur'(\w+)', u'fé_q23vrier', re.UNICODE).groups() 
(u'f\xe9_q23vrier',) 
>>> 

मैं [:alpha:] का उपयोग करने की कोशिश की, लेकिन यह काम नहीं कर रहा:

>>> re.search(ur'[:alpha:]+', u'février', re.UNICODE).groups() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: 'NoneType' object has no attribute 'groups' 
>>> 

तो मैं किसी भी तरह [_0-9] बिना \w मेल खा सकते हैं, लेकिन मैं कैसे पता नहीं है। और यहां तक ​​कि यदि मुझे पता चलता है कि यह कैसे करना है, तो क्या [:alpha:] जैसे एक तैयार शॉर्टकट है जो पायथन में काम करता है?

+1

'[: अल्फा:] 'के लिए, यह केवल एक चरित्र वर्ग के अंदर काम करता है, इसलिए सही रेगेक्स' [[: अल्फा:]] +' होगा, लेकिन पाइथन इन्हें वैसे भी समर्थन नहीं करता है। –

+0

क्यों स्ट्रिंग पर बस .split() को कॉल नहीं करते? – yak

उत्तर

42

आप एक नए चरित्र वर्ग का निर्माण कर सकते हैं:

[^\W\d_] 
बजाय

\w। अंग्रेजी में अनुवादित, इसका मतलब है "कोई भी चरित्र जो गैर-अल्फान्यूमेरिक वर्ण नहीं है ([^\W]\w जैसा ही है), लेकिन यह एक अंक भी नहीं है और अंडरस्कोर नहीं है"।

इसलिए, यह केवल यूनिकोड अक्षरों की अनुमति देगा (यदि आप re.UNICODE संकलन विकल्प का उपयोग करते हैं)।

+0

मुझे पहले से ही पता चला है कि '\ p {L}' समर्थित नहीं है, इसलिए आपका समाधान +1 जाने का तरीका है। – stema

+1

बहुत अच्छा समाधान !!! एक सवाल है। अगर मैं ऋण चिह्न (-) की अनुमति देना चाहता हूं तो क्या होगा। –

+0

किसी भी रेगेक्स चरित्र वर्ग में ''-'' को शामिल करने के लिए, इसे केवल अंत में (या शुरूआत):'' [^ \ W \ d _-] '' इस उदाहरण के लिए रखें। – RichVel