从单词中排除大写字母

时间:2014-10-27 13:43:32

标签: python regex

这是正则表达式,从单词中排除所有大写但不起作用“

import re
s = 'Wd+ Si# Sd*'
slower=''.join(re.findall('([a-z])[-#]*',s))
print slower

当我查看http://www.regexr.com/时,它工作正常,但在程序中它只提供小写字符。

在上面的例子中,它应该给出输出

d+i#d*

4 个答案:

答案 0 :(得分:3)

您可以使用str.translate

s = 'Wd+ Si# Sd*'
import string

print(s.translate(None,string.uppercase))
d+ i# d*

比正则表达式快一点,比使用join更快:

In [29]: import re    
In [30]: s = 'Wd+ Si# Sd*'
In [31]: timeit ''.join(re.findall('[^A-Z]', s))
100000 loops, best of 3: 4.23 µs per loop

In [32]: import string    
In [33]: timeit s.translate(None,string.uppercase)
1000000 loops, best of 3: 388 ns per loop


In [38]: timeit ''.join([i for i in s if i not in ascii_uppercase])
100000 loops, best of 3: 2.07 µs per loop

答案 1 :(得分:2)

使用大写字母^排除所有大写字母[A-Z]

>>> import re
>>> s = 'Wd+ Si# Sd*'
>>> ''.join(re.findall('[^A-Z]', s))
'd+ i# d*'

仅使用join而不是re.search re.sub,使用>>> re.sub('[A-Z]', '', s) # No '^' here as we want to find upper-case to replace. 'd+ i# d*' - 它更简单:

{{1}}

答案 2 :(得分:2)

为什么不用空字符串替换所有[A-Z]

In [3]: re.sub('[A-Z]','','Wd+ Si# Sd*')                       
Out[3]: 'd+ i# d*'

如果您想过滤空格/标签...,只需添加\s

In [5]: re.sub('[A-Z\s]','','Wd+ Si# Sd*')
Out[5]: 'd+i#d*'

答案 3 :(得分:1)

这是一个使用生成器表达式而不是正则表达式的解决方案。

>>> from string import ascii_uppercase
>>> s = 'Wd+ Si# Sd*'
>>> uppers = set(ascii_uppercase)
>>> ''.join(i for i in s if i not in uppers)
'd+ i# d*'