我有以下代码来查找和替换长于一个字符的单词,包含连字符且不包含数字:
new Regex(@"\w{2,}\-\D", RegexOptions.IgnoreCase).Replace(s, " ")
为了仅替换匹配单词中的连字符,我需要更改什么?
答案 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”。