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

时间:2011-07-06 19:54:30

标签: python

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

我所知道的不正确:

s= input("Enter your string: ")
words = sorted(s.strip().split())
for word in words:
    print (word)

因为只有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 

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

非常感谢任何帮助。不用说我是python的新手。

9 个答案:

答案 0 :(得分:6)

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

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

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

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

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

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

>>> word = 'abcdD'
>>> bool(re.search('([A-Z])', word))

答案 1 :(得分:5)

提示:“创建两个列表”

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

您使用for .. else的方式是错误的 - 当循环中没有else时,会执行break块。你试图做的逻辑看起来像这样

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>

您还可以使用any

写得更短
if any(c in "ABCDEFGHIJKLMNOPQRSTUVWXYZ" for c in s):
     # <do something>
else:
     # <do something>

答案 2 :(得分:2)

对于问题的第一部分,听起来像正则表达式会更容易(只需要查找[A-Z]的正则表达式就可以了)。

对于第二部分,我建议使用两个列表,因为这是在一个for循环中打印所有内容的简单方法。有一个non_upper_words列表和一个upper_words列表。

因此,该计划的基本纲要是:

  1. 将字符串拆分为一个单词数组。
  2. 对于数组中的每个单词:如果正则表达式返回true,则添加到upper_words。否则:添加到non_upper_words。
  3. 打印第一个数组中的每个单词,然后打印第二个单词。
  4. 我用伪代码编写了这个,因为它是一个编程任务,所以你应该自己编写实际的代码。希望它有所帮助!

答案 3 :(得分:1)

您可以将isupper method用于您的目的:

text = 'sssample Text with And without'

uppers = []
lowers = []

# Note that loop below could be modified to skip ,.-\/; and etc if neccessary
for word in text.split():
    uppers.append(word) if word[0].isupper() else lowers.append(word)

已编辑:您还可以通过以下方式使用islower method

text = 'sssample Text with And without'

other = []
lowers = []

# Note that loop below could be modified to skip ,.-\/; and etc if neccessary
for word in text.split():
    lowers.append(word) if word.islower() else other.append(word)

OR取决于你真正需要的东西,你可以看看istitle方法:

titled = []
lowers = []

for word in text.split():
    titled.append(word) if word.istitle() else lower.append(word)

使用简单的if else语句:

titled = []
lowers = []

for word in text.split():       
    if word.istitle():
        titled.append(word) 
    else:
        lower.append(word)

答案 4 :(得分:1)

您可以使用列表推导来获取所有大写字符和小写字符。

def get_all_cap_lowercase_list(inputStr):
    cap_temp_list = [c for c in inputStr if c.isupper()]
    low_temp_list = [c for c in inputStr if c.islower()]
    print("List of Cap {0}  and List of Lower {1}".format(cap_temp_list,low_temp_list))

    upper_case_count = len(cap_temp_list)
    lower_case_count = len(low_temp_list)
    print("Count of Cap {0}  and Count of Lower {1}".format(upper_case_count,lower_case_count))
get_all_cap_lowercase_list("Hi This is demo Python program")

输出是:

  

上限[&#39; H&#39;,&#39; T&#39;,&#39; P&#39;]列表和下方列表[&#39; i&#39;,&# 39; h&#39;,&#39; i&#39;&#39; s&#39;,   &#39;我&#39; s&#39;,&#39; d&#39;,&#39; e&#39;,&#39; m&#39;,&#39; o& #39;,&#39; y&#39;,&#39;&#39;,&#39; h&#39;,&#39; o&#39;,&#39; n&#39;,& #39; p&#39;,&#39; r&#39;,&#39; o&#39;,   &#39;&#39;&#39;&#39;&#39; a&#39;&#39; m&#39;]

     

第3章的数目及第22号的数目

答案 5 :(得分:0)

尝试执行以下操作:

  1. 字符串拆分为一个列表,其中每个项目都是一个单独的单词。
  2. 对于该列表中的每个单词,迭代并检查大写字母(考虑字符串常量,如string.uppercase)。如果它有大写字母,插入到结果列表的前面。如果没有,追加到结果列表的末尾。
  3. 仔细检查结果,打印出来。或者,如果您想避免迭代,请使用换行符\n 加入字符串中的项目。

答案 6 :(得分:0)

感谢大家的意见和帮助,这些都非常有用。这是我最终提交的答案。

s = input("Please enter a sentence: ")
withcap = []
without = []
for word in s.split():
    if word.islower():
        without.append(word)
    else:
        withcap.append(word)

onelist = withcap + without

for word in onelist:
    print (word)

答案 7 :(得分:0)

我认为你的答案可能只是搜索第一个字母大写的单词。要在单词中的任何位置查找包含大写字母的单词,您必须枚举单词中的每个字母,如下所示:

uin = input("Enter your text: ")

##create lists to hold upper and lower case words
up_words = []
no_up_words = []

for i, word in enumerate(uin.strip().split()):
    if word.islower():
        no_up_words.append(word)
    else: 
        up_words.append(word)

print(up_words, no_up_words)

答案 8 :(得分:0)

我的正则表达式:

vendor  = "MyNameIsJoe. IWorkInDDFinc."
ven = re.split(r'(?<=[a-z])[A-Z]|[A-Z](?=[a-z])', vendor)

我需要一个可能发生的分词: My Name Is Joe. I Work In DDF inc.