And this really is simple enough that I don't want to reach for regex's
for it. That is, I'd write it by hand rather than mess with that.
Well, with re.escape it's not messy at all :
You could do a ltrim function in one line :
def ltrim(s, x): return re.sub("^" + re.escape(x), '', s)
I think
re.sub("^" + re.escape(x), '', s)
is a lot more messy and hard to read than
s[len(prefix):] if s.startswith(prefix) else s
it's also roughly an order of magnitude slower.
I agree, but I said I wouldn’t choose to “mess” with regex, not that the resulting code would be messy. There is a substantial cognitive load in working with regex—they are another language. If you aren’t familiar with them (I’m not) it would take some time, and googling, to find that solution. If you are familiar with them, you still need to import another module and end up with an arguably less readable and slower solution. Python was designed from the beginning not to rely on regex for simple string processing, opting for fairly full featured set of string methods. These two simple methods fit well into that approach. -CHB -- Christopher Barker, PhD Python Language Consulting - Teaching - Scientific Software Development - Desktop GUI and Web Development - wxPython, numpy, scipy, Cython