我有一个这样的字符串 -"[A]16 and 5th and A[20] and 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]16 and 5th and A[20] and 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-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
使用这种模式:@"(\[A\])?\d+"
如果只有[A]
s。
如果你也有[B]
, [C]
...你可以使用这个模式:@"(\[[A-Z]\])?\d+"
您可以使用此模式:
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
|
注释
如果您需要更多内容或者这与其他字符串中断,请告诉我,我可能会对其进行修改。