需要关于以下正则表达式的帮助

时间:2011-02-15 11:48:11

标签: python regex

我正在使用带有re模块的python来表示正则表达式 我想删除字符串中除数字和字符以外的所有字符。 为实现这一点,我正在使用子功能

代码段: -

>>> text="foo.bar"

>>> re.sub("[^A-Z][^a-z]","",text)

'fobar'

我想知道为什么上面的表达式删除了“o。”?

我无法理解为什么它会删除“o” 有人可以解释一下这背后发生了什么吗?

我知道正确解决这个问题的方法是

>>> re.sub("[^A-Z ^a-z]","",text)

'foobar的'

提前致谢

3 个答案:

答案 0 :(得分:3)

要实现的一个非常重要的方面是[^A-Z][^a-z]代表两个字符(每个字符组一个),而[^A-Za-z]仅代表一个。

答案 1 :(得分:2)

详细解释:

[^A-Z]表示除了大写字母A到Z之外的所有字符,o中的第二个foo.bar不是大写的,因此事实上匹配foo.bar中的所有内容都匹配于这一点。

然后你添加[^a-z],这样你就可以找到一个非小写的字符,只有点匹配。

将两者结合起来然后查找非大写字符后跟非小写字符,这样就匹配o.

解决方案是Ignacio提出的解决方案。

答案 2 :(得分:1)

因为o匹配[^A-Z].匹配[^a-z]

正确的解决方案是[^A-Za-z0-9]