On 04/29/2010 01:00 PM, goldtech wrote:
Trying to start out with simple things but apparently there's some
basics I need help with. This works OK:
import re
p = re.compile('(ab*)(sss)')
m = p.match( 'absss' )

f=r'abss'
f
'abss'
m = p.match( f )
m.group(0)
Traceback (most recent call last):
   File "<pyshell#15>", line 1, in<module>
     m.group(0)
AttributeError: 'NoneType' object has no attribute 'group'

'absss' != 'abss'

Your regexp looks for 3 "s", your "f" contains only 2. So the regexp object doesn't, well, match. Try

  f = 'absss'

and it will work. As an aside, using raw-strings for this text doesn't change anything, but if you want, you _can_ write it as

  f = r'absss'

if it will make you feel better :)

How do I implement a regex on a multiline string?  I thought this
might work but there's problem:

p = re.compile('(ab*)(sss)', re.S)
m = p.match( 'ab\nsss' )
m.group(0)
Traceback (most recent call last):
   File "<pyshell#26>", line 1, in<module>
     m.group(0)
AttributeError: 'NoneType' object has no attribute 'group'

Well, it depends on what you want to do -- regexps are fairly precise, so if you want to allow whitespace between the two, you can use

  r = re.compile(r'(ab*)\s*(sss)')

If you want to allow whitespace anywhere, it gets uglier, and your capture/group results will contain that whitespace:

  r'(a\s*b*)\s*(s\s*s\s*s)'

Alternatively, if you don't want to allow arbitrary whitespace but only newlines, you can use "\n*" instead of "\s*"

-tkc



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

Reply via email to