繁体   English   中英

仅将字符的单个实例替换为python regexp

[英]replacing only single instances of a character with python regexp

我试图用其他东西替换单个$字符,并且想连续忽略多个$字符,但我不太清楚该怎么做。 我尝试使用前瞻:

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

这给了我:

'za $zb $$zc zd'

当我想要的是

'za $$b $$$c zd'

我究竟做错了什么?

请注意,如果未使用可调用的替换功能:

  • 您需要提前查询,因为如果后面跟$则不能匹配
  • 您需要向后看,因为如果前面有$则不能匹配

不那么优雅,但这是很容易理解的:

>>> 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'

如果我同时使用了lookahead和lookbehind,看来可以正常使用。 不过,似乎应该有一种更简单的方法。

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

好的,没有环顾四周,也没有回调函数:

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

使用re.split的替代re.split

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM