Case-Sensitive Sarch and replace

Harry George harry.g.george at boeing.com
Fri Jun 4 11:19:10 EDT 2004


tkpmep at hotmail.com (Thomas Philips) writes:

> Using glob(), I obtain a list of filenames with some characters in
> upper case, others in lower case. I want to rename the files by
> replacing one substring in each filename with another, but with two
> twists.
> 
> 1. The search must be case insensitive
> 2. After portion of the filename that does not match the search string
> must not have its case changed.
> 
> For example, if fn="AlphaMin.txt", searchstring="min" and
> replacestring= "Max", I want the file to be renamed "AlphaMax.txt" and
> not "alphaMax.txt" or "alphamax.txt"
> 
> I can easily get alphaMax.txt by using
> fn.lower().replace(searchstring.lower(),replacestring), but then the
> portion of fn that is not being replaced is lowercased.
> 
> It's not hard to write a function that repeatedly finds
> searchstring.lower() in fn.lower(), and then uses slices to replace
> the appropriate portions of fn, but there must be a simpler and
> cleaner way to acheive this goal. Suggestions?
> 
> Thomas Philips

Try using regular expressions:

        data=["AlphaMin.txt","alphaMin.txt","Alphamin.txt"]
        min_pat=re.compile(r'(min)',re.I)
        for name in data:
            msg("name=%s " % name)
            m=min_pat.search(name)
            cnt=len(m.groups())
            if cnt==0:
                msg('no match')
            elif cnt>1:
                msg('found more than one, need instructions')
            else:
                newname=min_pat.sub('Max',name)
                msg('newname=%s ' % newname)
            msg('\n')


-- 
harry.g.george at boeing.com
6-6M21 BCA CompArch Design Engineering
Phone: (425) 342-0007



More information about the Python-list mailing list