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

如何不使用正则表达式识别字符串连续重复子模式、常量与单字符

字符串连续重复子模式识别需求

这是我提出的第一个问题,我会尽量保持表述简洁。

我正在寻找可识别字符串中所有连续子模式、常量重复段或单个字符的实现方法。我最初是在尝试“简化”一道编程挑战时遇到该问题,没想到简化问题的过程反而比解决原题复杂度更高。

由于我目前卡在该问题上,且十分好奇该问题的实现方案,我附上了多组测试示例及对应预期结果。

输出结果的顺序必须与输入字符串的内容顺序完全一致。

example_input = 'XXXXXXXXXXZZZZZZZZZZZZZZZZZZZZ'
expected_result = [['X',10],['Z',20]]

example_input = 'ABCABCDDDE'
expected_result = [['ABC',2],['D',3],['E',1]]

example_input = 'ABCZZZZ XYXY'
expected_result = [['A',1],['B',1],['C',1],['Z',4],[' ',1],['XY',2]]

example_input = 'ABCDABCDDCBADCBAABCDABCD'
expected_result = [['ABCD',2],['DCBA',2],['ABCD',2]]
    
example_input = 'ZZZZZZZZZZABCDABCDABCD  DCBADCBADCBADCBADCBAXYZXYZ'
expected_result = [['Z',10],['ABCD',3],[' ',2],['DCBA',5],['XYZ',2]]

补充说明

我已经找到了一个可通过所有示例用例的有效解决方案,但该方案仍使用了正则表达式。如果有人能够不使用正则表达式实现该功能,我将非常感谢。

实现语言不做限制,不强制要求使用Python。

我当前的正则实现代码如下:

import re

def get_patterns(str) -> list:
  regex_find = re.findall(r'(.+?)\1{1,}|([A-Z ]{1})', str)
  matches = [i[0] if i[0] else i[1] for i in regex_find]
  expected_result = []
  while len(str) > 0 and matches:
    current = matches[0]
    count = 0
    
    while current in str[:len(current)]:
      count += 1
      str = str[len(current):]
  
    expected_result += [current, count],
    matches.pop(0)
  return expected_result

print(get_patterns('XXXXXXXXXXZZZZZZZZZZZZZZZZZZZZ') == [['X',10],['Z',20]])
print(get_patterns('ABCABCDDDE') == [['ABC',2],['D',3],['E',1]])
print(get_patterns('ABCZZZZ XYXY') == [['A',1],['B',1],['C',1],['Z',4],[' ',1],['XY',2]])
print(get_patterns('ABCDABCDDCBADCBAABCDABCD') == [['ABCD',2],['DCBA',2],['ABCD',2]])
print(get_patterns('ZZZZZZZZZZABCDABCDABCD  DCBADCBADCBADCBADCBAXYZXYZ') == [['Z',10],['ABCD',3],[' ',2],['DCBA',5],['XYZ',2]])

内容的提问来源于stack exchange,提问作者AbrahamJLR

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 14:24:21