【问题标题】:Check string for multiple occurrence of character in Python [duplicate]检查字符串是否在Python中多次出现[重复]
【发布时间】:2015-03-03 22:05:21
【问题描述】:

如何检查字符串是否仅包含(多个)破折号? '-''--''---' 等需要为True,但例如'-3''foo--' 等需要为False。最好的检查方法是什么?

【问题讨论】:

  • 数一数并与长度比较?
  • 它与复制相同,只需将其在my_list[0] 的检查更改为您想要的任何字符,例如'-'。如您所见,这里的所有答案都与欺骗线程相同
  • 谢谢。但是,链接中的代码返回此列表 ['---', '-', '--', 'asd-', '--asd', ''] True, True, True, False, False, True 而不是所需的 True, True, True, False, False, False 我不太确定为什么 - 显然是因为如果是空字符串,但我该如何解决?

标签: python string parsing


【解决方案1】:

Using re.match function

>>> import re
>>> def check(str):
...     if re.match(r"-+$", str):
...             return True
...     return False
...
>>> check ("--")
True
>>> check ("foo--")
False

更短

>>> def check(str):
...     return bool ( re.match(r"-+$", str))

【讨论】:

  • 您在字符串末尾缺少一个锚点。 check('-x') 将返回 True 和您的代码。请改用r"-+$"
  • 你可以使用return bool(re.match("-*$", s))(像其他解决方案一样为空字符串返回True)
  • @J.F.Sebastian 我不知道。感谢您的提示
【解决方案2】:

一种方法是使用集合。

>>> a = '---'
>>> len(set(a)) == 1 and a[0] == '-'
True
>>> a = '-x-'
>>> len(set(a)) == 1 and a[0] == '-'
False

如果set 的长度是1,则字符串中只有一个不同的字符。现在我们只需要检查这个字符是否是'-'

一个更简单的方法是比较集合。

>>> set('----') == set('-')
True
>>> set('--x') == set('-')
False

【讨论】:

  • 后者看起来相当优雅,甚至适用于空字符串,这与 'duplicate' 中给出的示例不同,因此它不是一个真正的示例。
【解决方案3】:

最明显的方法是:

  • 字符串是否等于所有破折号时的字符串:s == '-' * len(s);
  • 字符串是否包含与其长度一样多的破折号:s.count('-') == len(s);
  • 字符串的set 是否只是一个破折号:set(s) == set('-');
  • 字符串是否与仅破折号的正则表达式匹配:re.match(r'^-+$', s);和
  • all 字符串中的字符破折号:all(c == '-' for c in s)

毫无疑问还有其他选择;就“最佳”而言,您必须定义您的标准。另外,空字符串"" 会导致什么结果?里面所有的无字符都是破折号……

【讨论】:

  • s.count('-') == len(s)点赞
【解决方案4】:

可以使用内置函数all

>>> a= '---'
>>> all(i == '-' for i in a)
True
>>> b="----c"
>>> all(i == '-' for i in b)
False

【讨论】:

    【解决方案5】:

    有很多方法,但我认为最直接的一种是:

    all(i == '-' for i in '----')
    

    【讨论】:

    • 你需要把'----'改成变量名
    • all([]) is True 即空字符串可能需要特殊处理
    猜你喜欢
    • 2017-06-03
    • 1970-01-01
    • 2017-02-23
    • 1970-01-01
    • 2014-02-22
    • 2016-02-29
    • 2020-07-27
    • 2012-07-11
    • 1970-01-01
    相关资源
    最近更新 更多