On Wed, 16 Feb 2022 at 00:55, Steven D'Aprano <st...@pearwood.info> wrote: > > On Tue, Feb 15, 2022 at 05:39:33AM -0600, Tim Peters wrote: > > > ([^s]|s(?!pam))*spam > > > > Bingo. That pattern is easy enough to understand > > You and I have very different definitions of the word "easy" :-) > > > (if not to invent the > > first time): we can chew up a character if it's not an "s", or if it > > is an "s" but one _not_ followed immediately by "pam". > > It is times like this that I am reminded why I prefer to just call > string.find("spam") :-) >
Yeah, regexes always look terrible when they're used for simple examples :) But try matching a line that has (somewhere in it) the word "spam", then whitespace, then a number (or if you prefer: then a sequence of ASCII digits). It's easy to write "spam\s+[0-9]+" and not nearly as easy to write it with method calls. So it makes sense that, when you add a restriction like "the word spam must be the first instance of that in the line" (maybe not common with words, but it certainly would be if you're scanning for a colon or other separator), it should still be written that way. To be honest, I don't think I've ever used method calls for complicated parsing. It's just way too messy. Much easier to reach for a regex, sscanf pattern, or other tool - even if it's not technically perfect. ChrisA _______________________________________________ Python-ideas mailing list -- python-ideas@python.org To unsubscribe send an email to python-ideas-le...@python.org https://mail.python.org/mailman3/lists/python-ideas.python.org/ Message archived at https://mail.python.org/archives/list/python-ideas@python.org/message/WGWQ372YU5QBTOBI6CMSVWGM5TNENZLL/ Code of Conduct: http://python.org/psf/codeofconduct/