首页 > 解决方案 > 这个正则表达式发生了什么?

问题描述

我正在使用 python3re模块来剥离一串不是数字或数字的字符串'.'

我的第一次尝试是这样的:

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

当然,任何时候我有一个'.'在那里它都不会正常工作。所以我在前面加了一个反斜杠,'.'效果很好。

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

我从阅读文档中所期望的是,给定一个字符串'15.45'I 会以这样的字符串结束:'1545',因为'.'它将匹配除我已经排除的 0-9 之外的所有字符。

有人可以告诉我这里发生了什么吗?

标签: pythonregexpython-3.x

解决方案


您将两个字符与[^0-9]..

匹配 1:不是数字的东西 ( [^0-9])
匹配 2:任何东西 ( .)

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

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

这会给你“一串不是数字或'.'的东西”。


推荐阅读