I want to replace each character of a string by a different one, shifted over in the alphabet. I’m shifting by 2 in the example below, so a -> c, b -> d, etc.
I’m trying to use a regular expression and the sub function to accomplish this, but I’m getting an error.
This is the code that I have:
p = re.compile(r'(\w)')
test = p.sub(chr(ord('\\1') + 2), text)
print test
where the variable text is an input string.
And I’m getting this error:
TypeError: ord() expected a character, but string of length 2 found
I think the problem is that I the ord function is being called on the literal string “\1” and not on the \w character matched by the regular expression. What is the right way to do this?
It won’t work like this. Python first runs
chr(ord('\\') + 2and then passes that result top.sub.You need to put it in a separate function or use an anonymous function (lambda):
Or better yet use
maketransinstead of regular expressions: