正则表达式 - 得到[A] 16 5,A [20],15从 “[A] 16和第五和A [20]和15”
问题描述:
我有这样一个串 - "[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]数字字体(如果存在)。
请问,你能帮助我吗?
答
使用此模式:@"(\[A\])?\d+"
如果只有[A]
秒。
如果你还[B]
,[C]
...您可以使用此模式:@"(\[[A-Z]\])?\d+"
答
比较通用的模式可能是:
@"\[[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
答
您可以使用此模式:
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();
}
}
}
测试
输出
条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