Skip to content

Instantly share code, notes, and snippets.

@mback2k
Created December 23, 2012 12:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mback2k/4363137 to your computer and use it in GitHub Desktop.
Save mback2k/4363137 to your computer and use it in GitHub Desktop.
Transform case using RegExp
import unittest
import re
class RegexTransformCase(unittest.TestCase):
def setUp(self):
self.pattern = r'(?<!\\)\\(U|L)(.*?)(?<!\\)\\[ELU]'
self.upper_strings = [
(r'\Uhello\E', r'HELLO'),
(r'\\Uhello\E', r'\\Uhello\E'),
(r'\Uhello\\E', r'\Uhello\\E'),
(r'\\Uhello\\E', r'\\Uhello\\E'),
]
self.lower_strings = [
(r'\LHELLO\E', r'hello'),
(r'\\LHELLO\E', r'\\LHELLO\E'),
(r'\LHELLO\\E', r'\LHELLO\\E'),
(r'\\LHELLO\\E', r'\\LHELLO\\E'),
]
for pattern, string in tuple(self.upper_strings):
self.upper_strings.append(('test%s' % pattern, 'test%s' % string))
self.upper_strings.append(('%stest' % pattern, '%stest' % string))
self.upper_strings.append(('test%stest' % pattern, 'test%stest' % string))
for pattern, string in tuple(self.lower_strings):
self.lower_strings.append(('test%s' % pattern, 'test%s' % string))
self.lower_strings.append(('%stest' % pattern, '%stest' % string))
self.lower_strings.append(('test%stest' % pattern, 'test%stest' % string))
for pattern, string in tuple(self.upper_strings):
self.upper_strings.append((pattern.replace('test', r'te\\st'), string.replace('test', r'te\\st')))
self.upper_strings.append((pattern.replace('test', r'te\\Et'), string.replace('test', r'te\\Et')))
self.upper_strings.append((pattern.replace('test', r'te\\Lt'), string.replace('test', r'te\\Lt')))
self.upper_strings.append((pattern.replace('test', r'te\\Ut'), string.replace('test', r'te\\Ut')))
for pattern, string in tuple(self.lower_strings):
self.lower_strings.append((pattern.replace('test', r'te\\st'), string.replace('test', r'te\\st')))
self.lower_strings.append((pattern.replace('test', r'te\\Et'), string.replace('test', r'te\\Et')))
self.lower_strings.append((pattern.replace('test', r'te\\Lt'), string.replace('test', r'te\\Lt')))
self.lower_strings.append((pattern.replace('test', r'te\\Ut'), string.replace('test', r'te\\Ut')))
for pair in tuple(self.upper_strings):
print pair
for pair in tuple(self.lower_strings):
print pair
def regex(self, string):
def repl(match):
if match.group(1) == 'U':
return match.group(2).upper()
elif match.group(1) == 'L':
return match.group(2).lower()
return re.sub(self.pattern, repl, string)
def test_upper(self):
for pattern, string in self.upper_strings:
self.assertEqual(self.regex(pattern), string)
print self.regex(pattern), string
def test_lower(self):
for pattern, string in self.lower_strings:
self.assertEqual(self.regex(pattern), string)
print self.regex(pattern), string
if __name__ == '__main__':
unittest.main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment