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
相关产品推荐
相关产品推荐

