2013-04-11 10 views
8

से मेल खाने के लिए पुनः उपयोग कैसे करूं, मैं उपयोगकर्ता द्वारा टेक्स्ट इनपुट को मान्य कर रहा हूं ताकि यह केवल अक्षरों को स्वीकार करे लेकिन संख्याएं न हो। जब तक मैं किसी संख्या (उदा। 56) टाइप करता हूं, तब तक मेरा कोड ठीक काम करता है, यह मुझे चेतावनी देता है कि मुझे केवल अक्षर टाइप करना चाहिए और जब मैं अक्षरों में टाइप करता हूं तो यह कुछ भी वापस नहीं करता है (जैसा कि करना चाहिए)। मेरी समस्या यह है कि जब मैं अक्षर टाइप करके अक्षर टाइप करके शुरू करता हूं तो यह स्वीकार करता है उदा। (S45)। यह क्या करता है पहला पत्र स्वीकार करता है लेकिन पूरी स्ट्रिंग नहीं। मुझे पूरी स्ट्रिंग को स्वीकार करने की आवश्यकता है।पायथन- मैं पूरी स्ट्रिंग

def letterCheck(aString): 
    if len(aString) > 0: 
     if re.match("[a-zA-Z]", aString) != None: 
      return "" 
    return "Enter letters only" 
+0

वैसे आप खाली लौटने है, और '+' आपका रेगुलर एक्सप्रेशन के अंत में जोड़ने का प्रयास करें। – squiguy

+0

नहीं, वापसी का हिस्सा ठीक है। इसका सत्यापन कुछ भी वापस करने के लिए नहीं है अगर यह सत्यापन परीक्षण पास करता है। – Thomas

+2

आप केवल 'aString.isalpha() 'का उपयोग क्यों नहीं कर रहे हैं? – kindall

उत्तर

31

एंकर यह आरंभ और अंत है, और मैच के लिए एक या अधिक वर्ण:

if re.match("^[a-zA-Z]+$", aString): 

यहां ^ स्ट्रिंग की शुरुआत के लिए एंकर, $ अंत में, और + सुनिश्चित करता है कि आप 1 या अधिक वर्णों से मेल खाते हैं।

हालांकि आप केवल str.isalpha() का उपयोग करके बेहतर होंगे। मोटी नियमित अभिव्यक्ति हथौड़ा यहाँ तक पहुँचने के लिए कोई ज़रूरत नहीं:

>>> 'foobar'.isalpha() 
True 
>>> 'foobar42'.isalpha() 
False 
>>> ''.isalpha() 
False 
+3

क्या आपको इसकी आवश्यकता है: '^' re.match के साथ? क्या यह निहित नहीं है? – Medorator

+2

@buffer: हाँ, यह निहित है; मैं एक स्पष्ट एंकर पसंद करता हूं हालांकि आपको बिल्कुल '$ 'की आवश्यकता होती है, और बहुत से लोग' re.search() 'और' re.match() 'के बीच के अंतर पर यात्रा करते हैं। –

+0

@MartijnPieters: यह एक अच्छा सुझाव है। 'Re'match' – Medorator

4

अपने regex + कच्चे स्ट्रिंग में उपयोग सीमाओं regex एन्कोड करने के लिए, इस तरह:

r"^[a-zA-Z]+$" 
3

आप स्ट्रिंग पर isalpha() उपयोग करने पर विचार हो सकता है। यह सच हो जाता है यदि स्ट्रिंग में वर्णमाला वर्णों के अलावा कुछ भी नहीं है, अन्यथा झूठी है।

if aString.isalpha(): 
    do something 
else: 
    handle input error 
+0

इस एप्लिकेशन के लिए 'इस्लाफा() 'की एक अच्छी संपत्ति यह है कि यह खाली तारों के लिए' गलत 'लौटाता है, इसलिए इसके लिए अलग परीक्षण की आवश्यकता नहीं है। – kindall

+0

आपके त्वरित उत्तरों के लिए सभी को धन्यवाद, उन्होंने सभी ने मुझे इस समस्या को हल करने में मदद की है। – Thomas

0

यदि आप सुंदर pythonic लेखन के लिए लग रही है, isalpha और isdecimal के लिए जाना:

str = u"23443434"; 
print str.isdecimal(); 
संबंधित मुद्दे