[BangPypers] regular expression for Indian landline numbers

steve steve at lonetwin.net
Thu Nov 25 14:15:07 CET 2010


On 11/25/2010 04:10 PM, Kenneth Gonsalves wrote:
> On Thu, 2010-11-25 at 15:56 +0530, Anand Balachandran Pillai wrote:
>>  >  r'(^0\d{2}[-\s]{1}[1-6]{1}\d{7})|(^0\d{3}[-\s]{1}[1-6]{1}\d{6})|(^0
>>  >  \d{4}[-\s]{1}[1-6]{1}\d{5})'
>>  >
>>
>>  It is doable, but you should really use pyparsing for this - this is
>>  UGLY !
>
> I know - but everything I tried to make it look good did not work. And
> the app in which I am plugging this into requires an re.

Certainly, you can beautify that using the verbose option. Here is my attempt. 
(Note, I use the beautiful (?(id/name)yes-pattern|no-pattern) syntax for the 
black magic :)

phone_re = re.compile(r"""
     (^0                             # all std-codes start with 0
         (
             (?P<twodigit>\d{2})   | # the std-code group
             (?P<threedigit>\d{3}) | # either two, three or four digits
             (?P<fourdigit>\d{4})    # following the 0
         )
         [-\s]                       # space or -
         [1-6]                       # first digit of phone number
         (
             (?(twodigit)\d{7})   |  # 7 more phone digits for 3 digit stdcode
             (?(threedigit)\d{6}) |  # 6 more phone digits for 4 digit stdcode
             (?(fourdigit)\d{5})     # 5 more phone digits for 5 digit stdcode
         )
     )$""", re.VERBOSE)


hth,
cheers,
- steve


More information about the BangPypers mailing list