Ethan Furman wrote:
Greetings!

My closest to successfull attempt:

Python 2.5.4 (r254:67916, Dec 23 2008, 15:10:54) [MSC v.1310 32 bit (Intel)]
Type "copyright", "credits" or "license" for more information.

IPython 0.9.1 -- An enhanced Interactive Python.

   In [161]: re.findall('\d+','this is test a3 attempt 79')
   Out[161]: ['3', '79']

What I really want in just the 79, as a3 is not a decimal number, but when I add the \b word boundaries I get:

   In [162]: re.findall('\b\d+\b','this is test a3 attempt 79')
   Out[162]: []

What am I missing?

The sneaky detail that the regexp should be in a raw string (always a good practice), not a cooked string:

  r'\b\d+\b'

The "\d" isn't a valid character-expansion, so python leaves it alone. However, I believe the "\b" is a control character, so your actual string ends up something like:

  >>> print repr('\b\d+\b')
  '\x08\\d+\x08'
  >>> print repr(r'\b\d+\b')
  '\\b\\d+\\b'

the first of which doesn't match your target string, as you might imagine.

-tkc



--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to