提取重复字符随机合并字符串的目标子串时的字符保留错误问题
解决重复字符合并字符串中提取目标子串的问题
问题核心
从包含随机重复字符的混乱字符串中提取指定目标子串时,现有方法在目标本身包含重复字符(如16.008中的两个0)时,会出现字符顺序或重复次数错误(比如得到16.080)。
解决方案思路
核心是严格按照目标字符串的字符顺序,逐个匹配并消耗输入中的对应字符,避免乱序匹配重复字符。具体逻辑:
- 明确目标字符串的完整字符序列(比如你要的
Contingent Coupon 16.008% p.a. (Monthly)) - 遍历输入字符串,维护一个指针跟踪当前需要匹配的目标字符位置
- 每匹配到一个目标字符,就将其加入结果,并移动指针到下一个目标字符;指针到达目标末尾时停止
代码实现(Python)
def extract_target(merged_str, target): result = [] target_ptr = 0 target_length = len(target) for char in merged_str: if target_ptr >= target_length: break # 匹配当前目标字符时,加入结果并移动指针 if char == target[target_ptr]: result.append(char) target_ptr += 1 return ''.join(result) # 测试示例 merged_input = "CCoonnttiinnggeenntt CCoouuppoonn 16.01068.0%0 8p%.a .p (.Ma.o (nMtholyn)thly)" target_str = "Contingent Coupon 16.008% p.a. (Monthly)" print(extract_target(merged_input, target_str)) # 输出:Contingent Coupon 16.008% p.a. (Monthly)
为什么这个方法能解决问题
以16.008的提取为例:
目标序列是1→6→.→0→0→8,遍历输入字符串时:
- 匹配到
1→加入结果,指针移到6 - 匹配到
6→加入结果,指针移到. - 匹配到
.→加入结果,指针移到第一个0 - 找到输入中的第一个
0→加入结果,指针移到第二个0 - 继续遍历输入,找到下一个
0→加入结果,指针移到8 - 匹配到
8→加入结果,完成这部分提取
这种方式严格遵循目标的字符顺序和重复次数,不会把后续的8提前匹配,也不会乱序使用重复的0。
注意事项
- 该方法的前提是你明确知道最终要提取的目标字符串内容,这符合你的示例场景
- 若输入中目标字符的顺序完全混乱(不是按目标顺序夹杂重复),则需要更复杂的序列匹配算法,但你的示例中是重复字符随机合并,目标字符的顺序是保留的,所以此方法适用
内容的提问来源于stack exchange,提问作者Big Data Newbie
相关产品推荐
相关产品推荐

