您可以使用此模式:
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
|
評論
如果你需要什麼更多的還是這打破與其他琴絃,讓我知道,我也許可以修改它。
將你只有[A]或[B] [C]等也 – 2012-04-26 07:58:38
二早期例子中你的問題使用'[A] 16'和'A [20]'(兩種不同的格式),但在代碼中,你使用'[A] 16'' [A] 20'(相同的格式)。如果你想要一個很好的答案,你有一個很好的問題 - 有沒有'[B]'或'[C]'或'[G]'?還是隻有'[A]'?它可以是「A [200]」或「[A] 200」?......你甚至可以回到這個網站來閱讀這個評論/問題嗎? – 2012-04-26 10:43:29