Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 删除破折号,但不删除连字符_C#_Regex - Fatal编程技术网

C# 删除破折号,但不删除连字符

C# 删除破折号,但不删除连字符,c#,regex,C#,Regex,我想删除间隔词之前、之后和之间的破折号,但不删除连字符 这是一个测试句-测试----1-2-3-4-- 应成为: 这是一个测试句。测试一、二、三、四 删除多个破折号-- 保持多个连字符3--4 我试着用这个: string-sense=“这是一个测试句子。-测试--1-2-3-4-”; 字符串regex=@”(?我建议对不希望破折号旁边的字符同时进行正向回溯和正向前瞻。在您的情况下,这将是空格和句号。如果匹配了“向后看”或“向前看”,则要删除该破折号 这将是:(?您可以使用\b|\s执行此任

我想删除间隔词之前、之后和之间的破折号,但不删除连字符

这是一个测试句-测试----1-2-3-4--

应成为:

这是一个测试句。测试一、二、三、四

删除多个破折号
--

保持多个连字符
3--4


我试着用这个:

string-sense=“这是一个测试句子。-测试--1-2-3-4-”;

字符串regex=@”(?我建议对不希望破折号旁边的字符同时进行正向回溯和正向前瞻。在您的情况下,这将是空格和句号。如果匹配了“向后看”或“向前看”,则要删除该破折号


这将是:
(?您可以使用
\b|\s
执行此任务

崩溃无耻地从regex101.com复制:

/(\b|\s)({3})(\b|\s)/g

  • 第一个捕获组
    (\b|\s)
    • 第一个备选方案
      \b
      • \b
        在单词边界断言位置
        (^\w |\w$|\w\w |\w\w)
    • 第二个备选方案\s
      • \s
        匹配任何空白字符(等于
        [\r\n\t\f\v]
  • 第二捕获组
    ({3})
    • -{3}
      匹配字符-按字面意思(区分大小写)
    • {3}
      量词-精确匹配3次
  • 第三捕获组
    (\b|\s)
    • 第一个备选方案
      \b
      • \b
        在单词边界断言位置
        (^\w |\w$|\w\w |\w\w)
    • 第二个备选方案
      \s
      • \s
        匹配任何空白字符(等于
        [\r\n\t\f\v]

您只需匹配单词字符之间的所有连字符,然后使用简单的

Regex.Replace(s, @"\b(-+)\b|-", "$1")

详细信息

  • \b(-+)\b
    -单词边界,后跟1+连字符,然后是单词边界(即字母、数字和下划线之间的连字符)
  • |
    -或
  • -
    -其他上下文中的连字符(将被删除)
见:

可能有点像See,有一个更简单的解决方案。
Regex.Replace(s, @"\b(-+)\b|-", "$1")
var s = "This- -is - a test-sentence. -Test- --- One-Two--Three---Four----.";
var result = Regex.Replace(s, @"\b(-+)\b|-", "$1");
Console.WriteLine(result); 
// => This is  a test-sentence. Test  One-Two--Three---Four.