Python3中如何分割无空格超长字符串?含两类实际场景需求
嘿,这两个场景我刚好之前做过类似的处理,用Python就能轻松搞定,给你具体的实现方案:
场景一:拆分带前缀数字的驼峰字符串
针对输入类似 '1MichaelAngelo' 的字符串,我们需要拆分出开头的数字和后面的驼峰式姓名,生成带空格的字符串和结构化列表:
import re def process_single_name_str(s): # 匹配开头的连续数字 num_segment = re.match(r'^\d+', s) if not num_segment: # 处理没有数字前缀的异常情况(可选) return s, s.split() num_str = num_segment.group() name_part = s[num_segment.end():] # 拆分驼峰命名的姓名部分(每个大写开头的单词为一个姓名段) name_segments = re.findall(r'[A-Z][a-z]*', name_part) # 生成目标字符串和列表 formatted_str = f"{num_str} {' '.join(name_segments)}" structured_list = [int(num_str)] + name_segments return formatted_str, structured_list # 测试示例 s = '1MichaelAngelo' new_s, new_list = process_single_name_str(s) print(new_s) # 输出: 1 Michael Angelo print(new_list) # 输出: [1, 'Michael', 'Angelo']
这段代码逻辑很清晰:先用正则提取开头的数字部分,再用正则把后面的驼峰式姓名拆分成单个单词,最后分别拼接成带空格的字符串和包含整数数字的列表。
场景二:从换行分隔的超大字符串提取嵌套列表
对于格式为数字、名、姓循环换行的超大字符串,我们可以按行分割后分组处理:
def process_large_name_str(large_str): # 按换行分割,同时过滤掉空行(避免末尾多余换行或空行干扰) cleaned_lines = [line.strip() for line in large_str.split('\n') if line.strip()] # 每3行一组,转换成嵌套列表 result_list = [] for idx in range(0, len(cleaned_lines), 3): # 每组第一个元素转成整数,后两个保留字符串 current_group = [int(cleaned_lines[idx]), cleaned_lines[idx+1], cleaned_lines[idx+2]] result_list.append(current_group) return result_list # 测试示例 test_input = """1 Michael Emily 2 Mathew Jessica 3 Jacob Ashley""" print(process_large_name_str(test_input)) # 输出: [[1, 'Michael', 'Emily'], [2, 'Mathew', 'Jessica'], [3, 'Jacob', 'Ashley']]
这里先把大字符串拆分成单行列表,清理掉空行后,用步长为3的循环来分组,每组对应一个数字+姓名的组合,最后把所有组合收集成嵌套列表。如果你的超大字符串特别大,也可以改用生成器来处理,避免占用过多内存,不过一般情况下上面的写法足够高效。
内容的提问来源于stack exchange,提问作者Olamide226
相关产品推荐
相关产品推荐

