You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何不使用正则表达式从字符串中提取相同字符序列?

提取+和-的交替连续分组

我有一个由+和-组成的字符串(实际长度更长):

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 02:20:38