您可以使用此模式:
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