20
#input
my_string = 'abcdefgABCDEFGHIJKLMNOP'

如何从字符串中提取所有 UPPER?

#output
my_upper = 'ABCDEFGHIJKLMNOP'
4

7 回答 7

37

使用列表理解:

>>> 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'
于 2013-04-08T18:32:56.983 回答
7
import string
s = 'abcdefgABCDEFGHIJKLMNOP'
s.translate(None,string.ascii_lowercase)

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

要仅删除小写字母,您需要传递string.ascii_lowercase作为要删除的字母列表。

table是 None 因为当 table 是 时,None只会执行字符删除步骤。

于 2013-04-08T18:34:54.733 回答
6

高阶函数来救援!

filter(str.isupper, "abcdefgABCDEFGHIJKLMNOP")

编辑:如果您不知道过滤器的作用:过滤器接受一个函数和一个可迭代对象,然后将该函数应用于可迭代对象中的每个元素。它保留所有返回 true 的值并丢弃所有其余的值。因此,这将返回“ABCDEFGHIJKLMNOP”。

于 2013-04-08T18:38:17.160 回答
3

您可以使用更实用的方法

>>> s = 'abcdefgABCDEFGHIJKLMNOP'
>>> filter(str.isupper, s)
'ABCDEFGHIJKLMNOP'
于 2013-04-08T18:38:19.437 回答
2

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

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

所以这个 join plus findall 是最快的方法(每个 ipython %timeit (python 2.6)),使用 10000 个字符长的相同字符串

编辑:或不

In [12]: %timeit  my_list.translate(None,string.ascii_lowercase)
10000 loops, best of 3: 51.6 us per loop
于 2013-04-08T18:35:43.573 回答
0

干得好:

my_string = 'abcdefgABCDEFGHIJKLMNOP'

cleanChar = ''

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

newChar = cleanChar
print(" {}".format(newChar))
于 2018-05-22T19:20:06.020 回答
0
for char in my_string:
     if char in "ABCDEFGHIJKLMNOPQRSTUVWXYZ":
         print(char)
于 2020-06-11T21:44:37.670 回答