2017-04-11 90 views
1

我想用RegEx抓住兩個單詞的前4個字符。我有一些RegEx體驗,但搜索沒有任何結果。抓住兩個單詞的前4個字符RegEx

所以,如果我有Awesome Sauce我想最終的結果是AwesSauc

+3

你需要使用正則表達式嗎?這可以在1行Linq中完成:String.Join(「」,input.Split(null,StringSplitOptions.RemoveEmptyEntries).Select(w => w.Substring(0,Math.Min(4,w.Length ))'。 – Dai

+0

@戴只是因爲OP有*一些RegEx experinece * – niksofteng

+0

我使用Nintex來完成操作,所以我受RegEx – JeremyA1

回答

2

使用以下參數替換文本行動:

模式\W*\b(\p{L}{1,4})\w*\W*
替換文本$1

regex demo

模式的細節:

  • \W* - 0+非字字符(從左側修整)
  • \b - 領先字邊界
  • (\p{L}{1,4}) - 第1組(稍後經由$1反向引用稱爲)匹配任何1至4個字母(包括統一的)
  • \w* - 任何0+字字符(到字的其餘部分相匹配)
  • \W* - 0+非單詞字符(從右側修剪)
0

一種方法與Linq

var res = new string(input.Split().SelectMany((x => x.Where((y, i) => i < 4))).ToArray()); 
0

使用正則表達式實際上將更加複雜,完全沒有必要爲這種情況。只要做到以下任何一項。

var sentence = "Awesome  Sau"; 

// With LINQ 
var linqWay = string.Join("", sentence.Split(" ".ToCharArray(), options:StringSplitOptions.RemoveEmptyEntries).Select(x => x.Substring(0, Math.Min(4,x.Length))).ToArray()); 

// Without LINQ 
var oldWay = new StringBuilder(); 
string[] words = sentence.Split(" ".ToCharArray(), options:StringSplitOptions.RemoveEmptyEntries); 
foreach(var word in words) { 
    oldWay.Append(word.Substring(0, Math.Min(4, word.Length))); 
} 

編輯

更新後的代碼基礎上@戴的評論。 Math.Min檢查借用他的建議。

+3

如果輸入字符串中的任何單詞短於4個字符,此代碼將會崩潰。它也不處理多個連續的空白字符 - 或處理非空格空白。 – Dai

+0

@戴 - 偉大的捕獲。非常感謝。請參閱編輯。似乎OP限於正則表達式。 – niksofteng

+0

我建議使用'.Split(null,StringSplitOptions.RemoveEmptyEntries)'來分割所有空白字符,而不僅僅是空格。 – Dai

1

我覺得這個表達式應該做的工作

 string pattern = @"\b\w{4}"; 
     var text = "The quick brown fox jumps over the lazy dog"; 

     Regex regex = new Regex(pattern); 
     var match = regex.Match(text); 
     while (match.Captures.Count != 0) 
     { 
      foreach (var capture in match.Captures) 
      { 
       Console.WriteLine(capture); 
      } 
      match = match.NextMatch(); 
     } 

     // outputs: 
     // quic 
     // brow 
     // jump 
     // over 
     // lazy 

另外,您可以使用模式,如:

 \b\w{1,4} => The, quic, brow, fox, jump, over, the, lazy, dog 
     \b[\w|\d]{1,4} => would also match digits 

更新: 增加了對C#一個完整的例子,並略作修改的格局。還添加了一些替代模式。

+0

按照預期匹配'Awes'和'Sauc'。我只是在想@戴的評論關於我的答案中的字長<4,即使在這裏也適用。 – niksofteng

+0

如果它應該捕獲<4個字符和數字字符比@G Ravinders答案將是一個合適的解決方案。 – MiGro

+0

'\ w'已經匹配數字,在.NET正則表達式中,'\ w' ='[\ p {L} \ p {N} _]'。 –

0

試試這個表達

\b[a-zA-Z0-9]{1,4}