正则表达式:查找字符串中所有出现的特定数字

时间:2014-09-23 09:33:15

标签: python regex

在python中,我想在此字符串中找到所有确切出现的数字33,并将其替换为另一个数字。

我的输入字符串是:

original = '33 he3333llo 331 42 I\'m a 32 string 30 33 a33a 33\n 33'

我想要的输出是:

' NUMERO he3333llo 331 42 I\'m a NUMERO string 30 NUMERO a NUMERO a NUMERO \n NUMERO '

此处所有出现的33(但不是3333和331)已被占位符'NUMERO'替换。

我尝试过使用:

NUMERIC_PATTERN = re.compile(r'([^\d]+?)%s([^\d]+?)'%(33),re.UNICODE|re.DOTALL )
original = '33 he3333llo 331 42 I\'m a 32 string 30 33 a33a 33\n 33'
print original
print re.findall(NUMERIC_PATTERN,original)
print re.sub(NUMERIC_PATTERN,r'\1 NUMERO \2', original)

这给出了“几乎”正确答案:

'33 he3333llo 331 42 I\'m a 32 string 30  NUMERO  a NUMERO a  NUMERO \n 33'

但是,第一个和最后一个33不匹配。

我认为这个新表达式应该修复它但它没有(我将行的开头和结尾作为替代,但它与第一​​个版本的结果相同):

NUMERIC_PATTERN2 = re.compile(r'([^\d^]+?)%s([^\d$]+?)'%(33),re.UNICODE|re.DOTALL )

有人可以解释为什么NUMERIC_PATTERN2不起作用并建议解决方案吗? (我更喜欢在python中使用标准re模块的解决方案)

1 个答案:

答案 0 :(得分:1)

(?<!\d)33(?!\d)

试试这个。见演示。

http://regex101.com/r/lS5tT3/18