【问题标题】:Check special symbols in string endings检查字符串结尾的特殊符号
【发布时间】:2017-10-29 22:01:39
【问题描述】:

如何查看结尾单词中的!?,().等特殊符号?例如 Hello???Hello,,Hello! 返回 TrueH!??lloHel,lo 返回 False

我知道如何检查字符串的最后一个符号,但是如何检查两个或多个最后一个字符是否是符号?

【问题讨论】:

  • 如果您希望'H!??llo' 返回True,那么我认为您真的想检查字符串中是否出现任何特殊符号,而不仅仅是以它们结尾。
  • 你为什么要“两个或更多”?从您的示例中,检查最后一个字符就足够了。

标签: python python-3.x


【解决方案1】:

您可能必须为此使用正则表达式。

import re

def checkword(word):
    m = re.match("\w+[!?,().]+$", word)
    if m is not None:
        return True
    return False

那个正则表达式是:

\w+          # one or more word characters (a-zA-z)
[!?,().]+    # one or more of the characters inside the brackets
             #   (this is called a character class)
$            # assert end of string

使用re.match 会强制匹配从字符串的开头开始,否则我们必须在正则表达式之前使用^

【讨论】:

    【解决方案2】:

    你可以试试这样的:

    word = "Hello!"
    
    def checkSym(word):
        return word[-1] in "!?,()."
    
    print(checkSym(word))
    

    结果是:

    True
    

    尝试提供不同的字符串作为输入并检查结果。

    如果你想从字符串的末尾找到每个符号,你可以使用:

    def symbolCount(word):
    
        i = len(word)-1
        c = 0
        while word[i] in "!?,().":
            c = c + 1
            i = i - 1
    
        return c
    

    word = "Hello!?."测试它:

    print(symbolCount(word))
    

    结果是:

    3
    

    【讨论】:

    • word[len(word-1] 只是word[-1]。负索引从词尾开始。
    【解决方案3】:

    如果您想计算给定字符串末尾的“特殊”字符数。

    special = '!?,().'
    s = 'Hello???'
    
    count = 0
    for c in s[::-1]:
        if c in special:
            count += 1
        else:
            break
    
    print("Found {} special characters at the end of the string.".format(count))
    

    【讨论】:

    • 您能解释一下s[::-1] 语法的作用吗?这似乎很明显,但我以前从未见过。
    • 它获取列表's'并返回从最后一个元素开始到第一个元素结束的浅拷贝。看这里:stackoverflow.com/questions/3705670/…
    【解决方案4】:

    你可以使用re.findall:

    import re
    s = "Hello???"
    if re.findall('\W+$', s):
       pass
    

    【讨论】:

      【解决方案5】:

      你可以试试这个。

      string="gffrwr."
      print(string[-1] in "!?,().")
      

      【讨论】:

      • OP 说他们已经知道如何只检查最后一个字符。
      • 但是我的回答仍然和问题中的例子一样
      • For example Hello??? or Hello,, or Hello! returns True but H!??llo or Hel,lo returns False.
      • 好点。由于问题含糊不清,我决定撤销我的反对票,但我不能因为这样做的窗口已经关闭。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-22
      • 2014-09-21
      • 1970-01-01
      • 2016-01-14
      • 2011-05-29
      • 1970-01-01
      相关资源
      最近更新 更多