用python regex替换一个字符的单个实例

时间:2013-07-14 22:08:23

标签: python regex

我正在尝试用其他内容替换单个$字符,并希望忽略一行中的多个$个字符,而我无法弄清楚如何。我尝试使用lookahead:

s='$a $$b $$$c $d'
re.sub('\$(?!\$)','z',s)

这给了我:

'za $zb $$zc zd'

当我想要的是

'za $$b $$$c zd'

我做错了什么?

4 个答案:

答案 0 :(得分:3)

注意,如果没有使用可调用的替换功能:

  • 您需要提前检查,因为如果后跟$
  • ,则必须匹配
  • 您需要后视,因为如果前面有$
  • ,则必须匹配

不那么优雅,但这很可读:

>>> def dollar_repl(matchobj):
...     val = matchobj.group(0)
...     if val == '$':
...         val = 'z'
...     return val
... 
>>> import re
>>> s = '$a $$b $$$c $d'
>>> re.sub('\$+', dollar_repl, s)
'za $$b $$$c zd'

答案 1 :(得分:2)

嗯。如果我同时使用前瞻和后视,我看起来可以让它工作。似乎应该有一种更简单的方法。

>>> re.sub('(?<!\$)\$(?!\$)','z',s)
'za $$b $$$c zd'

答案 2 :(得分:2)

好的,没有环视和没有回调函数:

re.sub('(^|[^$])\$([^$]|$)', '\1z\2', s)

答案 3 :(得分:0)

re.split的替代方案:

''.join('z' if x == '$' else x for x in re.split('(\$+)', s))