பைத்தான் – ரிஜெக்ஸ் – 2 – தொலைபேசி எண்களை எப்படிச் சோதிப்பது?

முந்தைய பதிவில் அலைபேசி எண்கள் பார்த்தோம் அல்லவா! இப்போது நாம் ரிஜெக்ஸ் முறையில் தொலைபேசி எண்களைச் சோதிப்பது எப்படி என்று பார்ப்போமா! முதலில் சில தொலைபேசி எண்களை எழுதுவோம். கீழ் உள்ள எண்களைப் பாருங்கள்.

9144-22590000 – சென்னை எண்
91462-2521234 – திருநெல்வேலி எண்
9140-23456789 – ஐதராபாத் எண்
914562-212121 – சிவகாசி எண்

இந்த எண்களில் இரண்டு பகுதிகள் இருக்கின்றன. STD என்று சொல்லப்படும் பகுதிக் குறியீடு, பிறகு தொலைபேசி எண். இந்த இரண்டையும் சோதிக்க வேண்டும். இந்த எண்களை நன்றாக மீண்டும் ஒரு முறை உற்றுப் பாருங்கள். ஒரு விடயம் புலப்படும். என்ன அது? பகுதிக் குறியீட்டு எண்ணின் இலக்கங்கள், தொலைபேசி எண்ணின் இலக்கங்கள் – இரண்டையும் கூட்டிப் பாருங்கள். (9144 – இல் நான்கு, 22590000 -இல் எட்டு என) மொத்தம் பன்னிரண்டு இலக்கங்கள் வரும். இதில் இருந்து, விதிகளை வகுத்து விடலாம்.

1. மொத்தம் 12 இலக்கங்கள் இருக்க வேண்டும்.
2. பகுதிக்குறியீட்டுத்(STD) தொகுதி(group) குறைந்தது நான்கு இலக்கங்களுடனும் அதிகமாக, ஆறு இலக்கங்களுடனும் இருக்கும்.
3. தொலைபேசி எண், குறைந்தது ஆறு இலக்கங்கள், அதிகம், எட்டு இலக்கங்கள் கொண்டதாக இருக்கும்.
4. பகுதிக்குறியீட்டின் முதல் இரண்டு இலக்கங்கள் 91 எனத் தொடங்கும்.
5. பகுதிக்குறியீடு, தொலைபேசி எண் ஆகிய இரண்டும் இரண்டு தொகுதிகளாக(groups) இருக்கும். இடையில் ஒரு கோடு (-) இருக்கும்.

இந்த ஐந்து விதிகளையும் நமக்குப் பைத்தானுக்குப் புரியும்படிச் சொன்னால் போதும். இப்போது ஒவ்வொரு விதியாகத் தமிழில் இருந்து பைத்தானுக்கு மாற்றலாம். வாருங்களேன்!த்
1. மொத்தம் 12 இலக்கங்கள் இருக்க வேண்டும்.
re.compile(r'(\d){12}’)
2. பகுதிக்குறியீட்டுத்(STD) தொகுதி(group) குறைந்தது நான்கு இலக்கங்களுடனும் அதிகமாக, ஆறு இலக்கங்களுடனும் இருக்கும்.
re.compile(r'(\d){4,6}’)
3. தொலைபேசி எண், குறைந்தது இலக்கங்கள், அதிகம், எட்டு இலக்கங்கள் கொண்டதாக இருக்கும்.
re.compile(r'(\d){6,8}’)
4. பகுதிக்குறியீட்டின் முதல் இரண்டு இலக்கங்கள் 91 எனத் தொடங்கும்.
re.compile(r'(91)’)
5. பகுதிக்குறியீடு, தொலைபேசி எண் ஆகிய இரண்டும் இரண்டு தொகுதிகளாக(groups) இருக்கும். இடையில் ஒரு கோடு (-) இருக்கும். ஐந்தாவது விதியைச் செய்யும் போதே இப்போது நாம் செய்தவற்றை எல்லாம் ஒருங்கிணைத்து விடுவோம்.
re.compile(r'((91)(\d){4,6})-((\d){6,8})’)
மேல் உள்ள வரியில் கூடுதல் அடைப்புக்குறிகள்() இருப்பதை நீங்கள் கவனித்திருக்கலாம். இப்போது நாம் ஐந்து விதிகளையும் பைத்தானுக்குப் புரியும்படி மாற்றிவிட்டோம்.

மேலும் சில விதிகள்:
((\d){6-8}) என்று நாம் கொடுத்திருப்பது 6 அல்லது 8 இலக்க எண்ணைக் குறிக்கிறது. ஓரளவு இது சரிதான்! ஆனால் கொஞ்சம் யோசித்துப் பாருங்கள். 6 அல்லது 8 இலக்கங்களில் எங்கு வேண்டுமானாலும் சுழி(0) வரலாம். ஆனால் ஒரு தொலைபேசி எண், சுழியில் தொடங்காது அல்லவா? 1இல் இருந்து 9க்குள் ஓர் எண்ணாகத் தானே இருக்கும். அதை எப்படிப் பைத்தானுக்குப் புரியவைப்பது? \d என்பது ‘digit’ என்பதைக் குறிக்கிறது என்பது உங்களுக்குத் தெரிந்தது தான்! இப்போது அந்த இலக்கத்தில் 1-9 மட்டும் வரலாம் என்று எப்படிச் சொல்வது? ரொம்ப எளிது! அடைப்புக்குள் [1-9] என்று கொடுத்து விடுங்கள். வேலை முடிந்தது!
re.compile(r'((91)(\d){4,6})-([1-9][0-9]{5,8})’)
மேல் உள்ள வரியில், [1-9] புரிந்த உங்களுக்கு, [0-9]உம் புரிந்து விட்டது அல்லவா!

இப்போது சோதிக்கத் தொடங்கலாம்.

import re #வழக்கம் போல் re moduleஐ இறக்கிக்கொண்டோம்.
landLinePattern = re.compile(r'((91)((\d){2,4}))-([1-9][0-9]{5,8})’)
present = landLinePattern.search(‘My Number is 914462-521129’)
இப்போது
print(present.groups())
என்று கொடுத்துப் பாருங்கள்.
(‘91462′, ’91’, ‘462’, ‘2’, ‘2521129’) என்று தனித்தனித் தொகுதியாகப் பிரித்துப் பைத்தான் கொடுத்து விடும். இப்போது வந்திருக்கும் தொகுதி(group)களில் முதல் தொகுதியையும் கடைசித் தொகுதியையும் எடுக்க வேண்டும். எடுத்து, இரண்டையும் சேர்த்தால் பன்னிரண்டு இலக்கங்கள் வருகின்றனவா என்று பார்த்தால், நம்முடைய வேலையை முடித்து விடலாம். அது சரி, முதல் தொகுதி(group)யையும் கடைசித் தொகுதியையும் எப்படி அச்சிடுவது?
print(present.group(1))
print(present.group(5))
914462
521129
என்று விடை வரும். இந்த இரண்டுத் தொகுதிகளின் நீளத்தையும் (அதாங்க, இலக்கங்களை) கூட்டினால் பன்னிரண்டு வர வேண்டும்.
std = len(present.group(1))
phone = len(present.groups(5))
என்று இரண்டின் நீளத்தையும் கூட்டி,
if (std+phone)==12:
print(“Perfect Phone No”)
else:
print(“Not Phone No”)

அவ்வளவுதான்! நம்முடைய நிரல் எழுதும் வேலை முடிந்து விட்டது. இப்போது, பைத்தான் ரிஜெக்சில் என்னென்ன படித்தோம் என்பதை நினைவுபடுத்திக் கொள்ளுங்கள்.
compile(), search(), group() ஆகியன எப்படிப் பயன்படுகின்றன என்பது நினைவில் இருக்கிறது அல்லவா! இப்போது ஒரு வேலையாக(function) இதே நிரலை எழுதிவிடலாம் வாருங்கள்.

import re 

def isLandLine(sentence):
  landLinePattern = re.compile(r'((91)((\d){2,4}))-([1-9][0-9]{5,8})')
  present = landLinePattern.search(sentence)
  std = len(present.group(1))
  phone = len(present.group(5))
  if (std+phone)==12:
    return True
  else: 
    return False
  

sentence = 'My number is 914462-521129'
landline_present = isLandLine(sentence)
if(landline_present):
  print("Landline number is present in the sentence")
else: 
	print("Landline Number is not present in the sentence")

 

அப்பாடா! ஒரு நிரல் முடிந்தது என்று ஓயப் பார்த்தால், ஒருவர் வந்து, 91 என்பதற்குப் பதிலாகச் சில நேரங்களில் நாம் சுழி(0) கொடுப்போமே! அதை உங்கள் நிரல் கையாளுமா? என்று கேட்கிறார். ‘இப்பவே கண்ண கட்டுது, அதை அடுத்த பதிவில் பார்த்துக் கொள்ளலாம், போங்கள்’ என்று சொல்லி விட்டேன். சரி தானே!

– கி. முத்துராமலிங்கம்(muthu@payilagam.com)

துணை நின்ற தளங்கள்:
automatetheboringstuff.com/2e/chapter7/

%d bloggers like this: