2014-09-23 81 views
0

在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中的溶液)

+0

很好啊,没有答案做解释......我会离开这里,那么:'[^ \ d ^]'并不意味着“匹配除了线或数字开头什么”,这意味着“匹配除数字或^之外的任何内容,与'[^ \ d $]'相同,其中'^'和'$'不再是行锚,而是文字字符。 :'([^ \ d] | ^)%s([^ \ d] | $)'(不需要量词)。 – Jerry 2014-09-23 10:43:00

回答

相关问题