2011-08-14 13 views
18

यदि मेरे पास 10 या अधिक अंकों की स्ट्रिंग है, तो मैं इसे फ़ोन नंबर के रूप में कैसे प्रारूपित कर सकता हूं?पायथन में एक फोन नंबर प्रारूपित करने का सबसे अच्छा तरीका क्या है?

कुछ तुच्छ उदाहरण:

555-5555 
555-555-5555 
1-800-555-5555 

मैं उन पता उन्हें फ़ॉर्मेट करने के लिए केवल तरीके नहीं हैं, और यह बहुत संभव है कि मैं चीजों को बाहर छोड़ देंगे अगर मैं इसे अपने आप करते हैं। क्या कोई पाइथन लाइब्रेरी या फ़ोन नंबर स्वरूपण का मानक तरीका है?

+5

वे किस सीमा से आ सकते हैं? फोन नंबरों को स्वरूपित करने के लिए अलग-अलग देशों में अलग-अलग सम्मेलन होते हैं। –

+4

सेकेंडेड। कृपया उस कोड को न लिखें जो हर फोन नंबर को यूएस प्रारूप में मानता है। इस तरह के कार्यक्रमों के साथ काम करने की कोशिश करना वास्तव में परेशान है। – snap

+1

ऐसा लगता है कि फोन नंबर लिखने का मानक तरीका E.123 कहा जाता है। तो एक राष्ट्रीय नंबर '(800) 555 5555' जैसा दिखता है, और एक अंतरराष्ट्रीय नंबर' +1 800 555 5555' जैसा दिखता है। लेकिन मत भूलें कि विभिन्न समूहों की लंबाई देश के अनुसार बदलती है। http://en.wikipedia.org/wiki/E.123 –

उत्तर

32
पुस्तकालय के लिए

: PHONENUMBERS (pypi, source)

अंतरराष्ट्रीय फोन नंबरों को पार्सिंग, स्वरूपण, भंडारण और मान्य करने के लिए Google की सामान्य लाइब्रेरी का पायथन संस्करण।

रीडेम अपर्याप्त है, लेकिन मुझे पता चला कि कोड अच्छी तरह से प्रलेखित है।

+15

त्वरित उत्तर की तलाश करने वालों के लिए, यहां एक यूएस नंबर वाला नमूना है। 'पीओपी फोएननबर्स इंस्टॉल करें' फिर ''फोएननबर्स आयात करें phonenumbers.format_number (phonenumbers.parse (" 8006397663 ",' यूएस '), फोननबर्स। फोन नंबरम्बरमेट। राष्ट्रीय)' ' –

+1

इस पुस्तकालय में कस्टम प्रारूप का उपयोग कैसे करें? मुझे {CountryCode} की आवश्यकता है - \ d {3} - {left_numbers} – Crusader

+0

गीथब पर रीडमेम बहुत अच्छा है। https://github.com/daviddrysdale/python-phonenumbers – Ryan

0

पीछे एक सरल समाधान हो सकता है और चार संख्याओं के बाद हाइफ़न डालें, फिर स्ट्रिंग की शुरुआत तक तीनों के समूह तक पहुंच जाएं। मुझे किसी अंतर्निहित फ़ंक्शन या उसके जैसा कुछ भी पता नहीं है।

आप इस सहायक हो सकते हैं: http://www.diveintopython3.net/regular-expressions.html#phonenumbers

रेगुलर एक्सप्रेशन उपयोगी अगर तुम फोन नंबर के उपयोगकर्ता इनपुट स्वीकार कर रहे हैं हो जाएगा। मैं उपरोक्त लिंक पर दिए गए सटीक दृष्टिकोण का उपयोग नहीं करता। कुछ आसान, जैसे अंक को अलग करना, शायद आसान और उतना ही अच्छा है।

इसके अलावा, संख्याओं में अल्पविराम डालना एक समान समस्या है जिसे कुशलता से कहीं और हल किया गया है और इस समस्या को अनुकूलित किया जा सकता है।

+0

पुस्तक से लिंक मृत है –

+0

मैंने लिंक तय किया। – ChrisP

19

अपने उदाहरण से अंतिम को छोड़कर तीन अंक समूहों के साथ स्वरूपित की तरह लगता है, तो आप एक साधारण समारोह लिख सकते हैं, हजार विभाजक उपयोग करता है और पिछले अंक जोड़ता है:

>>> def phone_format(n):                                 
...  return format(int(n[:-1]), ",").replace(",", "-") + n[-1]                           
... 
>>> phone_format("5555555") 
'555-5555' 
>>> phone_format("5555555") 
'555-5555' 
>>> phone_format("5555555555") 
'555-555-5555' 
>>> phone_format("18005555555") 
'1-800-555-5555' 
2

यहां utdemir's solution और this solution से अनुकूलित किया गया है जो पाइथन 2.6 के साथ काम करेगा, क्योंकि "," फॉर्मेटर पाइथन 2.7 में नया है।

def phone_format(phone_number): 
    clean_phone_number = re.sub('[^0-9]+', '', phone_number) 
    formatted_phone_number = re.sub("(\d)(?=(\d{3})+(?!\d))", r"\1-", "%d" % int(clean_phone_number[:-1])) + clean_phone_number[-1] 
    return formatted_phone_number 

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

  • कोई संबंधित समस्या नहीं^_^