[英]Remove hyphens using regex
我有以下代碼來查找和替換長於一個字符的單詞,這些單詞包含連字符且不包含數字:
new Regex(@"\w{2,}\-\D", RegexOptions.IgnoreCase).Replace(s, " ")
為了只替換匹配單詞中的連字符,我需要更改什么?
如果我正確理解了您的問題-您想用空格代替整個組,而不是 “ 長度超過一個字符,包含連字符,不包含數字 ”-而是僅替換這些組中包含的連字符。
為此,您實際上不需要更改正則表達式,因為它可以完成其工作並找到這些組。
您需要做的-是Regex.Replace方法的另一個替代,該替代方法不使用替換字符串,而是使用MatchEvaluator委托。 每次匹配都會調用此委托,並且應該從該委托中返回原始匹配的字符串或所需的替換字符串。
因此您的代碼如下所示:
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));
它不會用連字符左右替換所有在連字符左右具有1個字母字符的所有單詞。 如果連字符的左邊或右邊有一個數字,則沒有替代。 如果連字符周圍有空格,則相同。 它還會刪除多余的空間。
在上面的示例字符串中,刪除了“ test-test”和“ abc-xyz”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.