我正在使用带有re模块的python来表示正则表达式 我想删除字符串中除数字和字符以外的所有字符。 为实现这一点,我正在使用子功能
代码段: -
>>> text="foo.bar"
>>> re.sub("[^A-Z][^a-z]","",text)
'fobar'
我想知道为什么上面的表达式删除了“o。”?
我无法理解为什么它会删除“o” 有人可以解释一下这背后发生了什么吗?
我知道正确解决这个问题的方法是
>>> re.sub("[^A-Z ^a-z]","",text)
'foobar的'
提前致谢
答案 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]
。