如何不使用正则表达式从字符串中提取相同字符序列?
提取+和-的交替连续分组
我有一个由+和-组成的字符串(实际长度更长):
st='+++----++-++++-----'
想要将其按「连续+紧跟连续-」的规则分组,得到如下结果:
list_of_strings=['+++----', '++-', '++++-----']
以下是我尝试但无效的代码:
st='+++----++-++++-----' group_st='' for i, k in zip(st, st[1:]): if i==k: group_st+=i
原代码问题分析
你的代码逻辑完全没匹配需求:
- 只拼接了连续相同的字符,但没有处理「
+和-交替成组、遇到新的+时拆分」的核心规则 zip(st, st[1:])会漏掉最后一个字符,而且没有将生成的分组存入列表的逻辑- 完全没考虑「
+后接-」的成组逻辑
解决方案
方法1:手动循环实现(直观易懂)
逐个遍历字符,遇到新的+且上一个分组以-结尾时,就拆分并保存上一个分组:
st = '+++----++-++++-----' list_of_strings = [] current_group = '' for char in st: if char == '+': # 如果当前已有分组且结尾是'-',说明要开启新分组 if current_group and current_group[-1] == '-': list_of_strings.append(current_group) current_group = char else: current_group += char else: current_group += char # 别忘了添加最后一个分组 if current_group: list_of_strings.append(current_group) print(list_of_strings) # 输出: ['+++----', '++-', '++++-----']
方法2:正则表达式(简洁高效)
用正则匹配「一个或多个+紧跟一个或多个-」的模式,直接提取所有符合的子串:
import re st = '+++----++-++++-----' list_of_strings = re.findall(r'\++-+', st) print(list_of_strings) # 输出: ['+++----', '++-', '++++-----']
内容的提问来源于stack exchange,提问作者longira
相关产品推荐
相关产品推荐

