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