C#中如何提取两个标记字符串间最小区域内的所有子串
提取最小区域内A与B之间的字符串
看起来你需要提取字符串中每一对紧邻的、不同标记(A和B)之间的内容,而且要忽略连续相同标记之间的部分(比如连续两个A之间的内容不算,只取最后一个A到下一个B的内容)。我来分享一个简单的解决方案:
核心思路
我们需要精准匹配两种场景的内容:
- 从A开始,到下一个B结束的内容(中间不能有其他A,否则会开启新的最小区域)
- 从B开始,到下一个A结束的内容(中间不能有其他B)
用正则表达式可以同时覆盖这两种场景,直接提取所有符合要求的内容。
代码实现(Python)
import re # 你的输入字符串 input_str = "A 11 A 222222 B 333 A 44444 B 55 A 66666 B" # 正则表达式:匹配A→B和B→A的最小区域内容 pattern = r'(?<=A)\s*((?!A).*?)\s*(?=B)|(?<=B)\s*((?!B).*?)\s*(?=A)' # 提取所有匹配结果 matches = re.findall(pattern, input_str) # 整理结果:合并两个捕获组的内容,过滤空字符串 final_result = [content for pair in matches for content in pair if content] # 输出最终结果 print(' '.join(final_result)) # 输出:222222 333 44444 55 66666
正则表达式说明
(?<=A):正向后顾断言,确保当前位置前面是标记A\s*:匹配任意数量的空格(兼容内容前后的空格)((?!A).*?):捕获组,匹配不包含A的任意内容,非贪婪模式(保证只取到下一个B为止)(?=B):正向前瞻断言,确保当前位置后面是标记B|:逻辑或,同时匹配B→A的场景(结构和A→B完全对称)
这个方案完美适配你的需求:既忽略了连续A之间的"11",又精准提取了所有最小区域内的内容,和你给出的预期结果完全一致。
内容的提问来源于stack exchange,提问作者Vincent
相关产品推荐
相关产品推荐

