【问题标题】:How to split strings with double letters? (Python)如何用双字母分割字符串? (Python)
【发布时间】:2021-12-28 12:38:23
【问题描述】:

我已经考虑了一段时间,并决定寻求您的帮助。 例如,我有一个字符串“abcdefggarfse”或“abcdeefgh” 我的问题是我想在字母加倍的地方拆分这些字符串。 “abcdefggarfse”->“abcdefg”和“garfse” “abcdeefgh”->“abcde”和“efgh”

非常感谢!

【问题讨论】:

  • 您只需要检查双字母还是多次重复(例如 3 个或更多)?
  • 一开始最好知道当字母加倍时如何拆分字符串。但我也想知道如何检查重复。例如 babcdEFghij -> 这里我应该在 "ba" 和 "abcdEFghij" 处分开,因为 b 开始重复。
  • 这应该更好地解释。 'babab''bacbc' 会发生什么?
  • 结果应该是'babab' -> 'ba', 'ab', 'ba', 'ab' and 'bacbc' -> 'bac', 'cb', 'bc' .
  • 我无法理解其中的逻辑,抱歉。为什么在'bab''a' 在标记'ba''ab' 中都加倍?

标签: python string split


【解决方案1】:
s1="abcdefggarfse"
s2= "abcdeefgh"
s3="abcdefgggarffse"
s4= "abcdeeefgh"

def split_string(string):
    tokens = []
    base_delimiter = 0
    for i in range(len(string) - 1):
        if string[i] == string[i+1]:
            tokens.append(string[base_delimiter:i+1])
            base_delimiter = i + 1 
    tokens.append(string[base_delimiter:])
    return tokens


if __name__ == '__main__':
    l = split_string(s1)
    print(l)

    l = split_string(s2)
    print(l)
        
    l = split_string(s3)
    print(l)
    l = split_string(s4)
    print(l)

这会产生:

['abcdefg', 'garfse']
['abcde', 'efgh']
['abcdefg', 'g', 'garf', 'fse']
['abcde', 'e', 'efgh']

我不知道这是否是 3 次或更多重复的预期行为,但这可以检测到多个双字母。

【讨论】:

    【解决方案2】:

    遍历字符串,找到字母重复的索引。你可以简单地使用切片操作。

    a = "abcdefggarfse"
    for i in range(0,len(a) -1):
        if a[i] == a[i+1]:
           pos = i+1
           break
    
    pos1, pos2  = a[0:pos], a[pos:]
    

    输出

    pos1 = 'abcdefg'

    post2 = 'garfse'

    【讨论】:

      【解决方案3】:

      此功能在内置 split 方法中不可用,因此最简单的选择是使用 for 循环查找双字符并切片获取输出字符串。

      假设字符串只需要被拆分一次(分成两个输出字符串),下面的代码就可以了:

      input_ = "abcdefggarfse"
      
      for i in range(len(input_) - 1):
          if input_[i] == input_[i+1]:
              output1 = input_[:i+1]
              output2 = input_[i+1:]
              break
      
      print (output1)
      print (output2)
      

      输出是:

      abcdefg
      garfse
      

      您可能需要修改代码以将输出放入列表中,处理多个拆分或没有拆分的字符串等。

      另一种选择是使用正则表达式,但如果您之前没有使用过它们,上述方法是最简单的。

      【讨论】:

        【解决方案4】:

        您可以创建一个循环遍历单词并跟踪看到的前一个字符的函数。

        def split_rep(word):
            prev = None
            for idx, char in enumerate(word):
                if char == prev:
                    return word[:idx], word[idx:]
                else:
                    prev = char
            return word, None
        
        split_rep("abcdefggarfse")
        ('abcdefg', 'garfse')
        
        split_rep("abcdeefgh")
        ('abcde', 'efgh')
        
        split_rep("abcdefgh")
        ('abcdefgh', None)
        

        【讨论】:

          猜你喜欢
          • 2016-05-15
          • 2018-12-20
          • 2021-01-22
          • 2020-06-30
          • 2018-09-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多