2012-04-26 17 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 
| 

评论

如果你需要什么更多的还是这打破与其他琴弦,让我知道,我也许可以修改它。

相关问题