首先,「匹配除2012这个字符串以外的任意字符?」语义不明,你是想将其从原字符串中删除还是要匹配2012以外的年份?
姑且认为你的意思是后者,也即在一个特定模式里排除某些匹配的实例。
方法一、先预处理,将要匹配的字符串里的2012替换成不可能出现的字符串,然后再进行匹配处理,最后再将其替换回2012。
方法二、使用不匹配的前向断言 (?! ...):
import re
s = '....0033 1033 2012 2033 2043 3033.....'
p = re.compile('(?!2012)[0-9]{4}')
for m in re.finditer(p, s):
print m.group()
可以匹配出
0033
1033
2033
2043
3033
而没有'2012'
你要的效果是删除2012?
>>> a='....2012 2033.....'
>>> import re
>>> re.sub("2012", "", a)
'.... 2033.....'