如何根据给定偏移量输出两个模式之间的子字符串?
根据字符偏移量提取指定模式间的子字符串
问题场景
给定字符串、两个边界模式(如起始模式">"和结束模式"</p>"),以及一个字符偏移量,需要提取包含该偏移量的那一段两个模式之间的子字符串。例如:
string = '<p class="one">A quick brown fox</p><p class="two">Jumps over</p>'
当偏移量为20时,输出A quick brown fox;偏移量为55时,输出Jumps over。
解决方案思路
- 定位所有起始模式的结束位置(即起始模式之后的第一个字符位置),再为每个起始位置匹配对应的第一个结束模式的起始位置,形成一个个包含目标子串的区间。
- 判断输入的偏移量落在哪个区间范围内。
- 提取该区间内的子字符串。
代码实现(Python)
def extract_substring_by_offset(input_str, start_pattern, end_pattern, offset): start_len = len(start_pattern) end_len = len(end_pattern) # 收集所有起始模式后的起始位置 start_positions = [] current_pos = 0 while True: current_pos = input_str.find(start_pattern, current_pos) if current_pos == -1: break start_positions.append(current_pos + start_len) current_pos += start_len # 为每个起始位置匹配对应的结束位置,生成区间 intervals = [] for start in start_positions: end_pos = input_str.find(end_pattern, start) if end_pos != -1: intervals.append((start, end_pos)) # 匹配偏移量所在的区间并提取子串 for start, end in intervals: if start <= offset <= end: return input_str[start:end] # 偏移量不在有效区间时返回空字符串,可按需修改逻辑 return ""
测试示例
test_string = '<p class="one">A quick brown fox</p><p class="two">Jumps over</p>' # 测试偏移量20 print(extract_substring_by_offset(test_string, '">', '</p>', 20)) # 输出: A quick brown fox # 测试偏移量55 print(extract_substring_by_offset(test_string, '">', '</p>', 55)) # 输出: Jumps over
说明
- 该方法先批量定位所有符合条件的有效区间,再通过偏移量匹配对应的区间,确保提取的是包含目标偏移量的目标子串。
- 如果偏移量不在任何两个模式的有效区间内,函数默认返回空字符串,你可以根据需求调整返回逻辑(比如抛出提示信息)。
内容的提问来源于stack exchange,提问作者Lalas M
相关产品推荐
相关产品推荐

