【问题标题】:Counting Consecutive Words Within a String计算字符串中的连续单词
【发布时间】:2021-12-12 01:56:16
【问题描述】:

我得到一个字符串,应该计算三个连续的单词

所以“你好你好你好”是真的, “你好你好123你好”是假的, 和“你好 123 你好你好你好”是真的

当号码出现时,我找不到重置计数器的方法。在第二个示例中,我因此返回 true 顺便说一句,我使用的是 alpha 并且正在使用 python。任何人都可以帮助以正确的方式计算单词

counter = 0
    for word in words:
        if word.isalpha():
            counter += 1

【问题讨论】:

  • 您具体遇到了什么问题?您甚至都没有试图弄清楚单词是否与之前的单词重复...

标签: python python-3.x


【解决方案1】:

您可以在这里使用re.search:

inp = ["Hello hello hello", "Hello hello 123 hello", "Hello 123 hello hello hello"]
for x in inp:
    if re.search(r'\b(\w+) \1 \1\b', x, flags=re.I):
        print("MATCH: " + x)
    else:
        print("NO MATCH: " + x)

打印出来:

MATCH: Hello hello hello
NO MATCH: Hello hello 123 hello
MATCH: Hello 123 hello hello hello

【讨论】:

    【解决方案2】:

    您可以尝试使用两种解决方案:

    1. 使用标志

      • 这将需要在循环之前使用布尔值,并在遇到否定或在这种情况下为数字时切换布尔值
    2. 使用isnum()重置您的计数器

      • 这对您来说是最简单的解决方案,因为您只需要在代码中添加一个 if 语句,如果找到数字就恢复您的计数器

    更多信息请点击此链接What is a flag in python while loops? 或者这个https://www.tutorialspoint.com/python/string_isnumeric.htm

    【讨论】:

    • isnum() 如果给定的字符串全是字母,则将不起作用。这个问题没有说明数字被用作分隔符。
    • isnum() 绝对可以工作 ``` counter = 0 for word in words: if word.isalpha(): counter += 1 if word.isnum(): counter = 0 ```
    • 如果输入类似于"This is an input input input string",没有数字,则不会。
    • 那么这就是为什么它在一个 if 子句中,这是一个必要的数字会恢复计数器
    • 我不太确定您是否完全理解了原始帖子的问题
    【解决方案3】:

    你也可以试试这个解决方案...

    succ = 0
    for word in words.split():
        succ = (succ + 1)*word.isalpha()
        if succ == 3: return True
    else: return False
    

    【讨论】:

    • 这...不起作用。它所做的只是计算一行中是否有 3 个单词(any 个单词)。而且使用return 是个坏主意。
    • 听着,这被选为答案,所以我显然在这里做一些事情。去,请再读一遍这个问题,看看它是否在任何地方说它必须计算特定的单词。
    • 如果您没有看到正确的解决方案,也可以随时写出答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 2011-09-18
    相关资源
    最近更新 更多