如何用双字母拆分字符串? (Python)

How to split strings with double letters? (Python)

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

非常感谢!

遍历字符串并找到字母repeating.And所在的索引,您可以简单地使用切片操作。

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'

此功能在内置 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

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

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

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

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)
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 次或更多次重复的预期行为,但这可以检测到多个双字母。