python regex character group matches
Fredrik Lundh
fredrik at pythonware.com
Wed Sep 17 09:56:31 EDT 2008
christopher taylor wrote:
> my issue, is that the pattern i used was returning:
>
> [ '\\uAD0X', '\\u1BF3', ... ]
>
> when i expected:
>
> [ '\\uAD0X\\u1BF3', ]
>
> the code looks something like this:
>
> pat = re.compile("(\\\u[0-9A-F]{4})+", re.UNICODE|re.LOCALE)
> #print pat.findall(txt_line)
> results = pat.finditer(txt_line)
>
> i ran the pattern through a couple of my colleagues and they were all
> in agreement that my pattern should have matched correctly.
First, [0-9A-F] cannot match an "X". Assuming that's a typo, your next
problem is a precedence issue: (X)+ means "one or more (X)", not "one or
more X inside parens". In other words, that pattern matches one or more
X's and captures the last one.
Assuming that you want to find runs of \uXXXX escapes, simply use
non-capturing parentheses:
pat = re.compile(u"(?:\\\u[0-9A-F]{4})")
and use group(0) instead of group(1) to get the match.
</F>
More information about the Python-list
mailing list