Can python read up to where a certain pattern is matched?

Andrew Bennetts andrew-pythonlist at puzzling.org
Tue Mar 9 05:51:59 CET 2004


On Tue, Mar 09, 2004 at 03:37:46PM +1100, Andrew Bennetts wrote:
> On Mon, Mar 08, 2004 at 08:11:16PM -0800, Josiah Carlson wrote:
> > >That, and I suspect that reading strings in chunks, rather than 1 byte at a
> > >time, would be much faster also.
> > 
> > Yes and no.  string.find(character) is fast.
> > 
> > seq = [read_chars.find(i) for i in break_characters]
> > min(filter(lambda inp:inp>-1, seq)+[-1])
> > 
> > May not be quite so fast for large numbers of break characters.
> 
> For finding any one of multiple characters, I expect the re module would
> work well, with the bonus that it could easily extend to coping with more
> complex patterns.

Or even just iterating the simple way -- assuming the generator's input is
chunks for strings, rather than single characters:

def split(chunks, ends=('.', '?', '!')):
    current_piece = ''
    for chunk in chunks:
        for char in chunk:
            current_piece += char
            if char in ends:
                yield current_piece
                current_piece = ''

(I know I'm concatenating strings the slow way again; it's just for clarity)

This has the disadvantage of not pushing any work into C code, but at least
it doesn't make any function calls either.

I still think the re module would be a better approach, of course, due to
being in C *and* not needing many function calls.

-Andrew.





More information about the Python-list mailing list