要统计字符串中的字符数,您可以使用collections.Counter
:
>>> from collections import Counter
>>> counter = Counter("abceeedtyooo")
>>> print(counter)
Counter({'e': 3, 'o': 3, 'a': 1, 'd': 1, 'y': 1, 'c': 1, 'b': 1, 't': 1})
然后您可以按照以下方式过滤结果:
>>> result = [char for char in counter if counter[char] == 3]
>>> print(result)
['e', 'o']
如果您只想匹配连续的字符,可以使用正则表达式(参见re
):
>>> import re
>>> result = re.findall(r"(.)\1\1", "abceeedtyooo")
>>> print(result)
['e', 'o']
>>> result = re.findall(r"(.)\1\1", "abcaaa")
>>> print(result)
['a']
如果相同字符连续出现三次或更多次(例如在字符串 "aaabcaaa"
中,它将匹配两个 'a'
),此表达式也会匹配。匹配不重叠,因此在字符串 "aaaa"
上只匹配一次,在字符串 "aaaaaa"
上匹配两次。如果您不想多次匹配连续的字符串,请修改正则表达式为 r"(.)\1\1(?!\1)"
。为了避免匹配任何连续出现超过3次的字符,请使用使用(.)(?<!(?=\1)..)\1{2}(?!\1)
。这解决了 Python 正则表达式模块无法处理 (?<!\1)
的问题。