C# 使用正则表达式删除连字符

C# 使用正则表达式删除连字符,c#,regex,C#,Regex,我有以下代码来查找和替换长度超过一个字符、包含连字符且不包含数字的单词: new Regex(@"\w{2,}\-\D", RegexOptions.IgnoreCase).Replace(s, " ") 要仅替换匹配单词中的连字符,我需要更改什么?如果我正确理解了您的问题-您希望用空格替换不超过一个字符(包含连字符且不包含数字)的整个组,但仅替换这些组中包含的连字符 为此,您实际上不需要更改regex表达式,因为它会执行其工作并查找这些组 您所需要的是另一个方法重写,它不接受替换字符串,而是

我有以下代码来查找和替换长度超过一个字符、包含连字符且不包含数字的单词:

new Regex(@"\w{2,}\-\D", RegexOptions.IgnoreCase).Replace(s, " ")

要仅替换匹配单词中的连字符,我需要更改什么?

如果我正确理解了您的问题-您希望用空格替换不超过一个字符(包含连字符且不包含数字)的整个组,但仅替换这些组中包含的连字符

为此,您实际上不需要更改regex表达式,因为它会执行其工作并查找这些组

您所需要的是另一个方法重写,它不接受替换字符串,而是接受委托。每次匹配都会调用此委托,您应该从该委托返回原始匹配字符串或所需的替换字符串

因此,您的代码可以如下所示:

new Regex(@"\w{2,}\-\D", RegexOptions.IgnoreCase)
    .Replace(s, m => m.Groups[0].Value.Replace("-", " "));

如果我理解得很好,这将有助于:

string input = "12-12 - a-b test-test test3 abc-xyz - plop";
string regex = @"[a-zA-Z]{2,}\-[a-zA-Z]{2,} ";
string replace = "";

Console.WriteLine(Regex.Replace(input, regex, replace));
它会将所有在连字符左右各有一个以上字母字符的单词全部替换为零。 如果连字符的左侧或右侧有一个数字,则不需要替换。如果连字符周围有空格,则相同。它还删除了额外的空间


在上面的示例字符串中,test和abc xyz被删除。

到目前为止您尝试了什么?使用Regex.Replace查找和捕获匹配的单词,并根据需要替换它们。如果你知道正则表达式,这应该不难。我是正则表达式的新手。我需要的表达是什么?我在下面贴了一个答案。