2011-06-14 105 views
3

正則表達式的任何想法都需要刪除少於3個字母的單詞?所以它會發現「ii它是bbb貓老鼠帽子」等,但不是「四,三,二」。c#正則表達式刪除少於3個字母的單詞?

+9

「二」有三個字母 – 2011-06-14 13:33:18

+1

如若話「BBB」, '貓','老鼠'和'帽子'被刪除?這些單詞不少於3個字母。 – 2011-06-14 13:34:09

+2

我認爲你不應該在這裏使用正則表達式,當三行簡單的代碼可以做同樣的事時,不要使用正則表達式。 – 2011-06-14 13:34:41

回答

0

我要出去在這裏的肢體上,並拋出一個非正則表達式的解決方案在你:

public static string StripWordsWithLessThanXLetters(string input, int x) 
{ 
    var inputElements = input.Split(' '); 
    var resultBuilder = new StringBuilder(); 
    foreach (var element in inputElements) 
    { 
     if (element.Length >= x) 
     { 
      resultBuilder.Append(element + " "); 
     } 
    } 
    return resultBuilder.ToString().Trim(); 
} 

這是比其他解決方案更詳細,但我認爲使用LINQ的解決方案可能會超過其淨效益的性能開銷,和正則表達式發生同樣的費用(有更多的複雜性可能維護。)

+0

是的,可能不應該使用正則表達式:S。謝謝您的幫助 。並感謝所有其他解決方案。 – user685590 2011-06-14 13:54:37

+1

這和Linq選擇之間的性能差異可以忽略不計。我用這個輸入字符串「一二三四五六七八九十」寫了一個100萬次迭代的快速基準。 for循環/ StringBuilder方法耗時2.4891901秒,Linq選擇方法耗時2.4480243秒。 – MattDavey 2011-06-14 13:59:39

+0

有趣的是,正則表達式解決方案耗時1.4886646秒:s – MattDavey 2011-06-14 14:02:10

4

不一定需要這樣的正則表達式,它可以用一個簡單的linq選擇來完成。

string[] words = inputString.Split(' '); 

var longWords = words.Where(x => x.Length > 3); 

string outputString = String.Join(" ", longWords.ToArray()); 

地獄你甚至可以做到在一個代碼行:

outputString = String.Join(" ", inputString.Split(' ').Where(x => x.Length > 3).ToArray()); 
7

正則表達式匹配長度爲1的話3將\b\w{1,3}\b,用空字符串替換這些比賽。

Regex re = new Regex(@"\b\w{1,3}\b"); 
var result = re.Replace(input, ""); 

要同時刪除,你可以使用雙位:(本書雖然它會留下在字符串的開始/結束一個空格)

Regex re = new Regex(@"\s*\b\w{1,3}\b\s*"); 
var result = re.Replace(input, " "); 

0
string qText = "Long or not long sample text"; 
var inputWords = qText.Split(' ').ToList(); 
var rem = (from c in inputWords 
      where c.Length > 3 
      select c).ToList(); 
+1

請添加一些文字/描述以改善您的怒氣 – 2015-03-26 10:38:19

相關問題