You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中如何提取两个标记字符串间最小区域内的所有子串

提取最小区域内A与B之间的字符串

看起来你需要提取字符串中每一对紧邻的、不同标记(A和B)之间的内容,而且要忽略连续相同标记之间的部分(比如连续两个A之间的内容不算,只取最后一个A到下一个B的内容)。我来分享一个简单的解决方案:

核心思路

我们需要精准匹配两种场景的内容:

  1. 从A开始,到下一个B结束的内容(中间不能有其他A,否则会开启新的最小区域)
  2. 从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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:23:18