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

时间:2015-01-29 14:40:31

标签: c# regex

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

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

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

2 个答案:

答案 0 :(得分:0)

如果我已正确理解您的问题 - 您想要用空格替换整个组“长于一个字符,包含连字符且不包含数字” - 但只包含在这些组中的连字符

为此,您实际上不需要在执行其工作时更改正则表达式并找到这些组。

您需要的所有内容 - 是Regex.Replace方法的另一种覆盖,它不需要替换字符串,而是MatchEvaluator委托。每个匹配都会调用此委托,并且您应该从此委托返回原始匹配的字符串或您需要的替换字符串。

所以你的代码看起来像:

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

答案 1 :(得分:0)

如果我理解得很好,这应该会有所帮助:

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));

它取代了连字符左右两侧多出1个字母字符的所有单词。 如果连字符的左侧或右侧有一个数字,则没有替换。如果连字符周围有空格,则相同。它还消除了额外的空间。

在上面的示例字符串中,删除了“test-test”和“abc-xyz”。

相关问题