在python中正确使用正则表达式前瞻

时间:2013-08-14 21:44:49

标签: python regex

我有一个字符串应该列出一些美元金额,看起来像这样:

4000.05 . 5.200000000 300.650000 2000 .

最终应该看起来像这样:

4000.05 5200000000 300650000 2000

删除所有非小数部分。我试图使用此正则表达式删除所有未跟随两个数字然后是非数字字符的句点:

re.sub(".(?!([0-9])?!([0-9])?=([0-9]))","",f)

但最终会清空整个字符串。我怎么能做到这一点?

2 个答案:

答案 0 :(得分:3)

首先,dot是正则表达式中的元字符,匹配任何字符。你需要逃脱它。或者放入一个字符类,其中元字符没有任何特殊含义。当然,您需要转义右括号],否则它将被视为字符类的结尾。

其次,你的负面预测是有缺陷的。

尝试这样的事情:

re.sub(r'[.](?![0-9]{2}\W)',"",s)

答案 1 :(得分:1)

你需要这样的东西。

string = '4000.05 . 5.200000000 300.650000 2000 .'
print re.sub(r'[.](?![0-9]{2}\D)', '', string)

正则表达式:

[.]                      any character of: '.'
  (?!                    look ahead to see if there is not:
    [0-9]{2}             any character of: '0' to '9' (2 times)
            \D           match non-digits (all but 0-9)
  )                      end of look-ahead