如何在字符串中搜索大写字母并返回带有和不带大写字母的单词列表

cas*_*per 7 python

我的作业分配是编写一个程序,从用户读取一个字符串,并从输入中创建一个单词列表.创建两个列表,一个包含至少包含一个大写字母和一个单词的单词.包含任何大写字母.使用单个for循环打印出带有大写字母的单词,然后是不带大写字母的单词,每行一个单词.

我所知道的不正确:

s= input("Enter your string: ")
words = sorted(s.strip().split())
for word in words:
    print (word)
Run Code Online (Sandbox Code Playgroud)

因为只有Capitol在第一个字符时它才会对序列进行排序.对于此分配,角色可以出现在单词中的任何位置.如,'tHis is a sTring'.

我正在玩一个看起来与此类似的解决方案,只是为了看看我是否能用CAPS得到这些话.但它只是不工作:

    s = input("Please enter a sentence: ")
while True:
    cap = 0
    s = s.strip().split()
    for c in s:
        if c in "ABCDEFGHIJKLMNOPQRSTUVWXYZ":
            print(c[:cap])
            cap += 1
    else:
        print("not the answer")
        break 
Run Code Online (Sandbox Code Playgroud)

但正则表达式可能比写出整个字母表更好.

任何帮助深表感谢.不用说我是python的新手.

Ari*_*ury 6

>>> w = 'AbcDefgHijkL'
>>> r = re.findall('([A-Z])', word)
>>> r
['A', 'D', 'H', 'L']
Run Code Online (Sandbox Code Playgroud)

这可以为你提供一个单词中的所有字母...只是分享这个想法

>>> r = re.findall('([A-Z][a-z]+)', w)
>>> r
['Abc', 'Defg', 'Hijk']
Run Code Online (Sandbox Code Playgroud)

上面会给你所有以Caps letter开头的单词.注意:最后一个没有被捕获,因为它没有成功,但即便如此也可以被捕获

>>> r = re.findall('([A-Z][a-z]*)', w)
>>> r
['Abc', 'Defg', 'Hijk', 'L']
Run Code Online (Sandbox Code Playgroud)

如果在单词中找到大写字母,则返回true:

>>> word = 'abcdD'
>>> bool(re.search('([A-Z])', word))
Run Code Online (Sandbox Code Playgroud)


Joc*_*zel 5

提示:"创建两个列表"

s= input("Enter your string: ")
withcap = []
without = []
for word in s.strip().split():
    # your turn
Run Code Online (Sandbox Code Playgroud)

你使用for .. elsein的方式是错误的 - elsebreak循环中没有时执行块.你试图做的逻辑看起来像这样

for c in s:
    if c.isupper():
        # s contains a capital letter
        # <do something>
        break # one such letter is enough
else: # we did't `break` out of the loop
    # therefore have no capital letter in s
    # <do something>
Run Code Online (Sandbox Code Playgroud)

你也可以写得更短 any

if any(c in "ABCDEFGHIJKLMNOPQRSTUVWXYZ" for c in s):
     # <do something>
else:
     # <do something>
Run Code Online (Sandbox Code Playgroud)

  • 如果你不介意特定于语言环境,你可以将那个巨大的"ABCDEFGHIJKLMNOPQRSTUVWXYZ"位改为[string.uppercase](http://docs.python.org/library/string.html#string.uppercase). (2认同)