我想说我想将中心这个词转换为中心,影院转换为影院为了做到这一点,我写了一个如下所示的正则表达式:
s = "center ce..nnnnnnnnteeeerrrr mmmmeeeeet.eeerrr liiiiIIiter l1t3r"
regex = re.compile(r'(?:((?:(?:[l1]+\W*[i!1]+|m+\W*[e3]+|c+\W*[e3]+\W*n+)\W*t+|t+\W*h+\W*[e3]+\W*a+\W*t+|m+\W*a+\W*n+\W*[e3]+\W*u+\W*v+)\W*)([e3]+)(\W*)(r+))', re.I)
print(regex.sub(r'\1\4\3\2',s)
#prints "centre ce..nnnnnnnntrrrreeee mmmmeeeeet.rrreee liiiiIIitre l1tr3"
为了解决像 c.e.nn.ttteee,/ rr (基本上重复的字符和添加的标点符号)这样的漏洞,我被迫在每个字符之间添加\W*
。
但是,人们仍然可以使用c.c.e.e.n.n.t.t.e.e.r.r
之类的字符串,因为每个字母之间都有标点符号,而不仅仅是不同的字母,因此不匹配。
我想知道是否有一种更聪明的方法可以做到这一点,我可以使用re.sub
而不删除空格/标点符号,但仍然匹配。