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