我需要替换字符串中用美元符号括起来的所有点。 没有嵌套结构,所以我认为正则表达式是正确的工具。
示例字符串如下所示:
asdf $asdf.asdf.$ $..asdf$
我提出的正则表达式与美元符号中的部分匹配,但我希望在美元符号(example)内的每个点匹配:
\$([^$]*)\$
因此对于示例字符串,它应该产生四个匹配。我怎样才能做到这一点?
答案 0 :(得分:2)
由于您使用的是Python,最简单的解决方案是使用您的模式匹配$
到$
的子字符串,并将.
替换为您想要的任何lambda:< / p>
import re
s = "a.sdf $asdf.asdf.$. . .$..asdf$"
r = re.compile(r'\$([^$]*)\$')
print(r.sub(lambda m: m.group().replace('.',''), s))
# => a.sdf $asdfasdf$. . .$asdf$
请参阅IDEONE demo
答案 1 :(得分:0)
我认为这对正则表达式来说非常困难,因为你必须在某种意义上统计美元符号(你只想把两个美元符号之间的每一秒差距称为“封闭”,而其他人则“在外面”对吗? )
所以(python示例)
似乎更容易mystring.split('$')
,它会为您提供一个列表newlist = oldlist[1::2]
''.join(newlist).count('.')
)