这个正则表达式会发生什么?

时间:2018-07-27 23:43:01

标签: python regex python-3.x

我正在使用python3 re模块来去除字符串,而不是数字或'.'

我的第一次尝试是这样:

r = re.sub('[^0-9].', '', s)

当然,任何时候只要我有'.'都行不通。因此,我在'.'前面添加了一个反斜杠,它非常有效。

我的问题是,尽管我理解了为什么第一个表达式不起作用,但我不明白为什么它会同时与'.'字符和紧随其后的字符匹配。

通过阅读文档,我期望的是给定一个字符串'15.45',我最终会得到一个这样的字符串:'1545',因为'.'将匹配所有我已经排除的0-9以外的字符。

有人可以启发我这里发生的事情吗?

1 个答案:

答案 0 :(得分:2)

您要用[^0-9].匹配两个字符。

匹配项1:不是数字的内容([^0-9]
比赛2:任何事情(.

将句号匹配(.)放入“不是这些字符”集中:

import re
s = "b15_.45a"
re.sub('[^.0-9]+', '', s)
# '15.45'

这将为您提供“一串不是数字或'。'的字符串。”