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

C#正则表达式仅匹配两组之一,为何无法移除末尾单个短横?

问题原因分析

你的正则表达式没覆盖行尾单个-的情况,具体问题出在两个匹配分支上:

  1. 第一个分支(\s-\s\s-\s):只能匹配连续的- -(两个减号中间夹两个空格),正好对应第三种输入的结尾,所以能被移除。
  2. 第二个分支(\s-\s[^a-zA-Z]):要求-后面必须跟着一个非字母字符,但第一种输入的-直接位于行尾,后面没有任何字符(或只有换行符,不在匹配范围内),所以这个分支无法命中,自然没法移除末尾的单个-。
修正方案

你需要匹配行尾的一个或多个-序列,不管是单个还是多个。把正则改成@"(?:\s-\s)+$"即可,它会精准匹配行尾所有连续的-并替换为空。

修正后的C#代码:

foreach (var item in menuItems)
{
    item.NameWithParents = Regex.Replace(item.NameWithParents, @"(?:\s-\s)+$", string.Empty);
}

如果你的每个条目可能包含多行,建议加上RegexOptions.Multiline参数,确保匹配每一行的结尾:

foreach (var item in menuItems)
{
    item.NameWithParents = Regex.Replace(item.NameWithParents, @"(?:\s-\s)+$", string.Empty, RegexOptions.Multiline);
}

测试后三种输入的输出会变成:

Test Section - Main Series
Test 2 Section - Test Section - Main Seris
Main Series

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 03:41:44