2012-06-01 68 views
2

我有一個程序,它必須使用regexp輸出精確長度的子字符串。 但它也輸出更長的子字符串,它們與格式匹配。 輸入:一個作爲ASB,ASD ASDF asdfg 預期輸出(長度= 3):ASB ASD 真實輸出:ASB ASD ASD ASDC#正則表達式的確切長度

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text.RegularExpressions; 

namespace LR3_2 
    { 
    class Program 
    { 
     static void regPrint(String input, int count) 
     { 
      String regFormat = @"[a-zA-Z]{" + count.ToString() + "}"; 
      Regex reg = new Regex(regFormat); 
      foreach (var regexMatch in reg.Matches(input)) 
      { 
       Console.Write(regexMatch + " "); 
      } 

      //Match matchObj = reg.Match(input); 
      //while (matchObj.Success) 
      //{ 
      // Console.Write(matchObj.Value + " "); 
      // matchObj = reg.Match(input, matchObj.Index + 1); 
      //} 
     } 

     static void Main(string[] args) 
     { 
      String input = " "; 
      //Console.WriteLine("Enter string:"); 
      //input = Console.ReadLine(); 
      //Console.WriteLine("Enter count:"); 
      //int count = Console.Read(); 

      input += "a as asb, asd asdf asdfg"; 
      int count = 3; 
      regPrint(input, count); 
     } 
    } 
} 

回答

5

添加\b,意思是「在一個單詞的開始或結束」,你的表達,例如:

\b[a-zA-Z]{3}\b 

在你的代碼應該做到以下幾點:

String regFormat = @"\b[a-zA-Z]{" + count.ToString() + @"}\b"; 

要在編寫自己的測試程序之前測試正則表達式,可以使用工具ExpressoThe Regulator。他們實際上幫助你編寫表達式並對其進行測試。

+0

如果我設置了特定的數字(如3) - 它的工作原理。但它不適用於count.ToString() – UnknitSplash

+0

是的,這是一個3的例子,那麼你必須創建表達式連接字符串,就像你以前做的那樣。查看更新的答案。 –

+0

非常感謝!=) – UnknitSplash