JavaScript中使用正则表达式分割字符串:特定规则下的字符串拆分实现
按特定规则拆分字符串的解决方案
问题描述
你需要拆分以下字符串:"Vl.55.16b25.3d.42b50.59b30.90.24b35.3d.56.67b70.Tv.54b30.Vl.41b35.Tv.Bd.71b50.3d.99b20.03b50.Tv.73b50.Vl.05b25.12b40.Bd.Tv.82b25."
拆分规则如下:
- 每个拆分块的结尾必须是
b开头后跟两位数字的格式(例如b20、b25); - 满足规则1后,检查下一个部分是否是两位字符(比如
3d、Tv):如果不是,就把下一个部分并入当前块,直到下一个部分是两位字符或者到达字符串末尾。
Python实现方案
我写了一个直观的函数来实现这个逻辑,代码注释已经把每一步都讲清楚了:
def split_target_string(input_str): # 先移除字符串末尾的多余点,再按点分割成独立片段 split_parts = input_str.rstrip('.').split('.') final_blocks = [] current_block = [] for idx, part in enumerate(split_parts): current_block.append(part) # 检查当前片段是否符合"b+两位数字"的结尾规则 if len(part) >= 3 and part.startswith('b') and part[1:].isdigit() and len(part[1:]) == 2: # 查看是否还有下一个片段 if idx < len(split_parts) - 1: next_part = split_parts[idx + 1] # 如果下一个片段不是两位字符,继续合并,不结束当前块 if len(next_part) != 2: continue # 满足所有条件,将当前块拼接后加入结果 final_blocks.append('.'.join(current_block)) current_block = [] # 处理最后可能遗留的有效块 if current_block: final_blocks.append('.'.join(current_block)) return final_blocks # 测试用例 test_str = "Vl.55.16b25.3d.42b50.59b30.90.24b35.3d.56.67b70.Tv.54b30.Vl.41b35.Tv.Bd.71b50.3d.99b20.03b50.Tv.73b50.Vl.05b25.12b40.Bd.Tv.82b25." result = split_target_string(test_str) print(result)
代码逻辑拆解
- 预处理字符串:先去掉末尾的
.,再按.分割成小片段,这样我们可以逐个处理每个单元; - 构建拆分块:遍历每个片段,把它加入当前正在构建的块中;
- 检查结尾规则:当当前片段是
bXX格式时,我们需要判断是否要结束当前块:- 如果下一个片段不是两位字符,说明需要继续合并,跳过结束步骤;
- 如果下一个片段是两位字符,或者已经到了最后一个片段,就把当前块拼接成字符串,加入结果列表,然后重置当前块;
- 收尾处理:防止字符串末尾的块因为没有后续片段而被遗漏,最后把剩余的有效块加入结果。
运行结果
执行代码后,你会得到符合预期的拆分结果:
['Vl.55.16b25', '3d.42b50.59b30.90.24b35', '3d.56.67b70', 'Tv.54b30', 'Vl.41b35', 'Tv.Bd.71b50', '3d.99b20.03b50', 'Tv.73b50', 'Vl.05b25.12b40.Bd.Tv.82b25']
内容的提问来源于stack exchange,提问作者Khoi Hoang
相关产品推荐
相关产品推荐

