检查 Python 中多次出现字符的字符串

Check string for multiple occurrence of character in Python

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

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

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

您可以使用内置函数all:

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

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

一种方法是使用集合。

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

最明显的方法是:

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

毫无疑问还有其他选择;根据 "best",您必须定义您的标准。另外,空字符串 "" 应该产生什么结果?其中的所有无字符都是破折号...