快速从字符串中删除小写子串?

时间:2013-03-15 16:34:27

标签: python string numpy

Python(简单或使用numpy)从字符串s中删除所有小写子字符串的有效方法是什么?

s = "FOObarFOOObBAR"
remove_lower(s) => "FOOFOOBAR"

3 个答案:

答案 0 :(得分:20)

我使用str.translate。如果您为转换表传递None,则仅执行删除步骤。在这种情况下,我将ascii_lowercase作为要删除的字母传递。

>>> import string
>>> s.translate(None,string.ascii_lowercase)
'FOOFOOOBAR'

我怀疑你会找到一种更快捷的方法,但如果有人有动机,我总会timeit来比较不同的选择:。)。

答案 1 :(得分:10)

我的第一种方法是''.join(x for x in s if not x.islower())

如果你需要速度使用mgilson答案,它会快得多。

>>> timeit.timeit("''.join(x for x in 'FOOBarBaz' if not x.islower())")
3.318969964981079

>>> timeit.timeit("'FOOBarBaz'.translate(None, string.ascii_lowercase)", "import string")
0.5369198322296143

>>> timeit.timeit("re.sub('[a-z]', '', 'FOOBarBaz')", "import re")
3.631659984588623

>>> timeit.timeit("r.sub('', 'FOOBarBaz')", "import re; r = re.compile('[a-z]')")
1.9642360210418701

>>> timeit.timeit("''.join(x for x in 'FOOBarBaz' if x not in lowercase)", "lowercase = set('abcdefghijklmnopqrstuvwxyz')")
2.9605889320373535

答案 2 :(得分:3)

import re

remove_lower = lambda text: re.sub('[a-z]', '', text)

s = "FOObarFOOObBAR"
s = remove_lower(s)

print(s)