matching exactly a 4 digit number in python

harijay harijay at gmail.com
Fri Nov 21 22:46:57 CET 2008


Hi
I am a few months new into python. I have used regexps before in perl
and java but am a little confused with this problem.

I want to parse a number of strings and extract only those that
contain a 4 digit number anywhere inside a string

However the regexp
p = re.compile(r'\d{4}')

Matches even sentences that have longer than 4 numbers inside
strings ..for example it matches "I have 3324234 and more"

I am very confused. Shouldnt the \d{4,} match exactly four digit
numbers so a 5 digit number sentence should not be matched .

Here is my test program output and the test given below
Thanks for your help
Harijay

PyMate r8111 running Python 2.5.1 (/usr/bin/python)
>>> testdigit.py

Matched  I have 2004 rupees
Matched  I have 3324234 and more
Matched  As 3233
Matched 2323423414 is good
Matched 4444 dc sav 2412441 asdf
SKIPPED random1341also and also
SKIPPED
SKIPPED 13
Matched  a 1331 saves
SKIPPED  and and as dad
SKIPPED  A has 13123123
SKIPPED  A  13123
SKIPPED 123 adn
Matched 1312 times I have told you
DONE

#!/usr/bin/python
import re
x = [" I have 2004 rupees "," I have 3324234 and more" , " As 3233 " ,
"2323423414 is good","4444 dc sav 2412441 asdf " , "random1341also and
also" ,"","13"," a 1331 saves" ," and and as dad"," A has 13123123","
A  13123","123 adn","1312 times I have told you"]

p = re.compile(r'\d{4} ')

for elem in x:
 if re.search(p,elem):
  print "Matched " + elem
 else:
  print "SKIPPED " + elem

print "DONE"



More information about the Python-list mailing list