如何用双字母拆分字符串? (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 次或更多次重复的预期行为,但这可以检测到多个双字母。
我考虑了一段时间,决定向您寻求帮助。 例如我有一个字符串“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 次或更多次重复的预期行为,但这可以检测到多个双字母。