带有否定的re.sub的语法

时间:2017-03-23 17:43:28

标签: python regex python-3.x

我想使用re.sub使用否定将'1213'更改为'1x13'。语法应该更改1后面的任何字符,但前提是该字符不是3。

我能得到的最佳输出是1x213。但那2仍然存在。

FWIW,我明白了:

print(re.sub(r'1(?!3)', '1x', '1213')) 

什么是正确的语法?

2 个答案:

答案 0 :(得分:3)

我相信你只想要:

print(re.sub(r'1[^3]', '1x', '1213'))

模式1[^3]匹配任何1后跟括号中的字符类,其中^仅表示其为否定类。

答案 1 :(得分:2)

使用否定的字符类和正面的后视:

In [45]: re.sub('(?<=1)[^3]', 'x', s)
Out[45]: '1x13'

[^3]将匹配除3和(?<=1)之外的所有字符,确保您的字符跟随1。