Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using a regular expression to replace upper case repeated letters in python with a single lowercase letter

I am trying to replace any instances of uppercase letters that repeat themselves twice in a string with a single instance of that letter in a lower case. I am using the following regular expression and it is able to match the repeated upper case letters, but I am unsure as how to make the letter that is being replaced lower case.

import re s = 'start TT end' re.sub(r'([A-Z]){2}', r"\1", s) >>> 'start T end' 

How can I make the "\1" lower case? Should I not be using a regular expression to do this?

like image 468
ajt Avatar asked Nov 10 '10 14:11

ajt


1 Answers

Pass a function as the repl argument. The MatchObject is passed to this function and .group(1) gives the first parenthesized subgroup:

import re s = 'start TT end' callback = lambda pat: pat.group(1).lower() re.sub(r'([A-Z]){2}', callback, s) 

EDIT
And yes, you should use ([A-Z])\1 instead of ([A-Z]){2} in order to not match e.g. AZ. (See @bobince's answer.)

import re s = 'start TT end' re.sub(r'([A-Z])\1', lambda pat: pat.group(1).lower(), s) # Inline 

Gives:

'start t end' 
like image 136
jensgram Avatar answered Oct 08 '22 22:10

jensgram