2012-04-26 49 views
2

我有這樣一個串 - "[A]16 and 5th and A[20] and 15"正則表達式 - 得到[A] 16 5,A [20],15從 「[A] 16和第五和A [20]和15」

我需要取值[A]16,5,A[20],15。 (數字和[A],如果存在的話)

我正在使用C#。

string[] numbers = Regex.Split("[A]16 and 5th and [A]20 and 15", @"\D+"); 

下面的代碼將只給我數字。但是我還需要[A]數字字體(如果存在)。

請問,你能幫助我嗎?

+0

將你只有[A]或[B] [C]等也 – 2012-04-26 07:58:38

+0

二早期例子中你的問題使用'[A] 16'和'A [20]'(兩種不同的格式),但在代碼中,你使用'[A] 16'' [A] 20'(相同的格式)。如果你想要一個很好的答案,你有一個很好的問題 - 有沒有'[B]'或'[C]'或'[G]'?還是隻有'[A]'?它可以是「A [200]」或「[A] 200」?......你甚至可以回到這個網站來閱讀這個評論/問題嗎? – 2012-04-26 10:43:29

回答

0

使用此模式:@"(\[A\])?\d+"如果只有[A]秒。
如果你還[B][C] ...您可以使用此模式:@"(\[[A-Z]\])?\d+"

1

比較通用的模式可能是:

@"\[[A-Z]][0-9]+|[A-Z]\[[0-9]+]|[0-9]+" 



[[A-Z]][0-9]  - matches [Letter from A-Z]Number   example: [A]10 
or |[A-Z]\[[0-9]+] - matches Letter from A-Z[Number]   example: A[10] 
or |[0-9]+   - matches Numers from 1-N     example: 5, or 15 
0

您可以使用此模式:

string lordcheeto = @".*?(\[A\]\d+|\d+|A\[\d+\]).*?"; 

它也會修剪你想要的比賽中的垃圾。儘管由於Split的工作方式,數組中會有空字符串。至於看似必要的一般的情況下,你可以使用這個:

string lordcheeto = @".*?(\[[A-Z]\]\d+|\d+|[A-Z]\[\d+\]).*?"; 

代碼

using System; 
using System.Text.RegularExpressions; 

namespace RegExIssues 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      // Properly escaped to capture matches. 
      string lordcheeto = @".*?(\[A\]\d+|\d+|A\[\d+\]).*?"; 
      string input = "[A]16 and 5th and A[20] and 15"; 

      executePattern("lordcheeto's", input, lordcheeto); 

      Console.ReadLine(); 
     } 

     static void executePattern(string version, string input, string pattern) 
     { 
      // Avoiding repitition for this example. 
      Console.WriteLine("Using {0} pattern:", version); 

      // Needs to be trimmed. 
      var result = Regex.Split(input.Trim(), pattern); 

      // Pipe included to highlight empty strings. 
      foreach (var m in result) 
       Console.WriteLine("|{0}", m); 

      // Extra space. 
      Console.WriteLine(); 
      Console.WriteLine(); 
     } 
    } 
} 

測試

http://goo.gl/VNqpp

輸出

Using lordcheeto's pattern: 
| 
|[A]16 
| 
|5 
| 
|A[20] 
| 
|15 
| 

評論

如果你需要什麼更多的還是這打破與其他琴絃,讓我知道,我也許可以修改它。

相關問題