簡體   English   中英

使用正則表達式刪除連字符

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM