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

C#中如何用正则表达式提取包含分隔符的目标文本?

解决Regex.Split保留分隔符的需求

你当前用@"\s(we|tomorow)\s"做拆分,之所以只得到中间的have a rainy day but maybe,是因为这个正则匹配的是空格+关键词+空格的整体,Regex.Split会把这个匹配的整体作为分隔符移除,但其实捕获组里的关键词已经被保留在拆分后的数组里了,只是你没用到这些元素。

要得到包含we和tomorow的目标字符串,这里给你两种可行方案:

方案一:直接利用原拆分结果拼接

原正则拆分后,数组里的第2、3、4项就是你需要的内容,直接拼接即可:

string txtS = TextBoxS.Text; // 你的原始字符串
string[] splitResult = Regex.Split(txtS, @"\s(we|tomorow)\s");
string target = $"{splitResult[1]} {splitResult[2]} {splitResult[3]}";
// target 就是 "we have a rainy day but maybe tomorow"

方案二:调整正则,拆分时保留关键词

用零宽断言只在关键词前后的空格位置拆分,避免把关键词当作分隔符移除:

string txtS = TextBoxS.Text;
// 匹配关键词前的空格,或关键词后的空格(不消耗关键词本身)
string[] splitResult = Regex.Split(txtS, @"(?<=\s(we|tomorow))\s|\s(?=(we|tomorow)\s)");
// 过滤掉不需要的前后片段,拼接目标内容
string target = string.Join(" ", splitResult.Where(item => !string.IsNullOrWhiteSpace(item) && item != "Today" && item != "will be sunny."));

额外提一句:如果你的核心需求是提取这两个关键词之间的内容(包含关键词),用Regex.Match会更直接:

string txtS = TextBoxS.Text;
Match match = Regex.Match(txtS, @"we.*tomorow");
string target = match.Success ? match.Value : "";

内容的提问来源于stack exchange,提问作者user20465780

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 04:01:59