正则表达式匹配封闭美元符号内的所有点的出现

时间:2016-03-30 10:14:34

标签: python regex

我需要替换字符串中用美元符号括起来的所有点。 没有嵌套结构,所以我认为正则表达式是正确的工具。

示例字符串如下所示:

asdf $asdf.asdf.$ $..asdf$

我提出的正则表达式与美元符号中的部分匹配,但我希望在美元符号(example)内的每个点匹配:

\$([^$]*)\$

因此对于示例字符串,它应该产生四个匹配。我怎样才能做到这一点?

2 个答案:

答案 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('.')