次のパターンを使用できます。
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
|
コメント
さらに何か必要な場合、またはこれが他の文字列で壊れている場合は、お知らせください。おそらく変更できます。