我正在尝试用其他内容替换单个$
字符,并希望忽略一行中的多个$
个字符,而我无法弄清楚如何。我尝试使用lookahead:
s='$a $$b $$$c $d'
re.sub('\$(?!\$)','z',s)
这给了我:
'za $zb $$zc zd'
当我想要的是
'za $$b $$$c zd'
我做错了什么?
答案 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))