【问题标题】:Remove strings with repeating characters [Python]删除带有重复字符的字符串 [Python]
【发布时间】:2017-09-12 09:14:21
【问题描述】:

我需要确定一个字符串是否由某个重复字符组成,例如eeeee55555!!!

我知道这个正则表达式'e{1,15}' 可以匹配eeeee,但它显然不能匹配555。我试过[a-z0-9]{1-15},但它甚至匹配我不需要的字符串,比如Hello

解决方案不必是正则表达式。我只是想不出任何其他方法来做到这一点。

【问题讨论】:

标签: python regex


【解决方案1】:

当且仅当字符串中的所有字符都相同时,字符串才由单个重复字符组成。您可以通过从字符串中构造一个集合来轻松地对其进行测试:set('55555')

当且仅当集合的大小为 1 时,所有字符都相同:

>>> len(set('55555')) == 1
True
>>> len(set('Hello')) == 1
False
>>> len(set('')) == 1
False

如果您也想允许空字符串(设置大小为 0),请使用 <= 1 而不是 == 1

【讨论】:

    【解决方案2】:

    正则表达式解决方案(通过re.search()函数):

    import re
    
    s = 'eeeee'
    print(bool(re.search(r'^(.)\1+$', s)))   # True
    
    s = 'ee44e'
    print(bool(re.search(r'^(.)\1+$', s)))   # False
    

    ^(.)\1+$

    • (.) - 捕获任何字符

    • \1+ - 反向引用之前捕获的组,重复一次或多次

    【讨论】:

      【解决方案3】:

      您不必为此使用正则表达式,确定字符串中的所有字符是否相同的测试将产生所需的输出:

      s = "eee"
      assert len(s) > 0
      reference = s[0]
      result = all([c==reference for c in s])
      

      或者使用set,就像 Thomas 展示的那样,这可能是更好的方法。

      【讨论】:

        猜你喜欢
        • 2014-06-01
        • 1970-01-01
        • 2017-02-15
        • 2021-06-05
        • 2013-11-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-30
        相关资源
        最近更新 更多