如何从一个字符串中提取所有UPPER? 蟒蛇(How to extract all UPPER

2019-08-20 09:44发布

#input
my_string = 'abcdefgABCDEFGHIJKLMNOP'

一个人如何会从字符串中提取所有上?

#output
my_upper = 'ABCDEFGHIJKLMNOP'

Answer 1:

使用列表理解:

>>> s = 'abcdefgABCDEFGHIJKLMNOP'
>>> ''.join([c for c in s if c.isupper()])
'ABCDEFGHIJKLMNOP'

使用生成器表达式:

>>> ''.join(c for c in s if c.isupper())
'ABCDEFGHIJKLMNOP

您还可以使用正则表达式做到这一点:

>>> re.sub('[^A-Z]', '', s)
'ABCDEFGHIJKLMNOP'


Answer 2:

import string
s = 'abcdefgABCDEFGHIJKLMNOP'
s.translate(None,string.ascii_lowercase)

string.translate(S,表[,deletechars])函数将从处于deletechars字符串,字符的列表中删除所有字符。 然后,该字符串将使用表(我们不是在这种情况下使用的话)翻译。

要删除只有小写字母,您需要通过string.ascii_lowercase为字母列表中删除。

table是None,因为当该表是None ,只有字符删除步骤将被执行。



Answer 3:

高阶函数来救援!

filter(str.isupper, "abcdefgABCDEFGHIJKLMNOP")

编辑 :如果你不知道什么过滤器是:过滤器需要一个功能和迭代,然后将功能适用于在迭代每一个元素。 它使所有返回真值,并抛出了所有的休息。 因此,这将返回“ABCDEFGHIJKLMNOP”。



Answer 4:

或使用正则表达式...这是一个简单的答案

import re
print ''.join(re.findall('[A-Z]+',my_string))

只是比较

In [6]: %timeit filter(str.isupper,my_list)
1000 loops, best of 3: 774 us per loop

In [7]: %timeit ''.join(re.findall('[A-Z]+',my_list))
1000 loops, best of 3: 563 us per loop

In [8]: %timeit re.sub('[^A-Z]', '', my_list)
1000 loops, best of 3: 869 us per loop

In [10]: %timeit ''.join(c for c in my_list if c.isupper())
1000 loops, best of 3: 1.05 ms per loop

所以这种联结,加上的findall是最快的方法(每IPython的%timeit(蟒2.6)),使用10000个字符长相同的字符串

编辑 :还是不行

In [12]: %timeit  my_list.translate(None,string.ascii_lowercase)
10000 loops, best of 3: 51.6 us per loop


Answer 5:

你可以使用一个功能更强大的方法

>>> s = 'abcdefgABCDEFGHIJKLMNOP'
>>> filter(str.isupper, s)
'ABCDEFGHIJKLMNOP'


Answer 6:

干得好:

my_string = 'abcdefgABCDEFGHIJKLMNOP'

cleanChar = ''

for char in my_string:
    if char in 'ABCDEFGHIJKLMNOPQRSTUVWXYZ':
        cleanChar = cleanChar + char

newChar = cleanChar
print(" {}".format(newChar))


文章来源: How to extract all UPPER from a string? Python