繁体   English   中英

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

[英]how to search for a capital letter within a string and return the list of words with and without capital letters

我的家庭作业是编写一个程序,它从用户那里读取一个字符串并从输入中创建一个单词列表。创建两个列表,一个包含至少包含一个大写字母的单词和一个不包含的单词t 包含任何大写字母。 使用单个 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 的新手。

>>> 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']

以上将为您提供以大写字母开头的所有单词。 注意:最后一个没有被捕获,因为它不会产生一个单词,但即使是那个也可以被捕获

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

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

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

提示:“创建两个列表”

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

您使用for.. else in 的方式是错误的 - 当循环没有break时执行else块。 您尝试执行的逻辑如下所示

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>

听起来正则表达式对于问题的第一部分会更容易(只寻找 [AZ] 的正则表达式应该可以解决问题)。

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

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

  1. 将字符串拆分为单词数组。
  2. 对于数组中的每个单词:如果 regex 返回 true,则添加到 upper_words。 否则:添加到 non_upper_words。
  3. 在第一个数组中打印每个单词,然后在第二个数组中打印。

我用伪代码写了这个,因为它是一个编程任务,所以你真的应该自己写实际的代码。 希望能帮助到你!

您可以使用 List Comprehensions 获取所有大写字符和小写字符。

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")

output 是:

Cap 列表 ['H', 'T', 'P'] 和下列表 ['i', 'h', 'i', 's', 'i', 's', 'd', ' e'、'm'、'o'、'y'、't'、'h'、'o'、'n'、'p'、'r'、'o'、'g'、'r' , '是']

Cap 3 计数和 Lower 22 计数

您可以使用isupper 方法来达到您的目的:

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 方法

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)

或者取决于你真正需要什么,你可以看看 istitle 方法:

titled = []
lowers = []

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

AND 与简单的 if else 语句:

titled = []
lowers = []

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

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

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)

我的正则表达式:

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. My Name Is Joe. I Work In DDF inc.

尝试执行以下操作:

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

感谢大家的投入和帮助,这一切都非常有用。 这是我最终提交的答案。

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM