正则表达式模式抓住方括号之间的所有数字?

时间:2016-01-06 23:09:16

标签: c# regex

我正在尝试创建一个正则表达式模式来从给定字符串中获取所有数字,这些数字位于方括号之间并用逗号分隔。输出应该是这样的,

  

Number1 = 45

     

Number2 = 66

依此类推......到目前为止我所拥有的只是一种模式,贪婪地抓住方括号之间的一切。

string input3;
//string pattern = @"\b\w+es\b";
string pattern = @"\[(.*?)\]";
//Regex regex = new Regex("[*]");
Console.WriteLine("Enter string to search: ");
input3 = Console.ReadLine();
//Console.WriteLine(input3);
List<string> substrings = new List<string>();
int count = 1;
foreach (Match match in Regex.Matches(input3, pattern)) {
    string substring = string.Format("Number{0} = '{1}'",count,match);
    count++;
    Console.WriteLine(substring);
    substrings.Add(substring);
}
string[] subStringArray = substrings.ToArray();
}

我应该创建两个模式,贪婪的模式,然后是第二个模式,以便用逗号分隔的所有数字搜索贪婪的输出?或者只创建一个模式会更有效吗?

1 个答案:

答案 0 :(得分:1)

你说你的字符串是

  

字符串,位于方括号之间,以逗号分隔。

我猜输入是那样的

  

[1,2,3,4,5,6]

所以你可以使用这个正则表达式来获取数字

var numbers = Regex.Match("[1,2,3,4,5,6]", @"\[(?<numbers>[\d,]+)\]").Groups["numbers"].Value;

然后按拆分以获取数字集合

var collectionOfNumbers = numbers.Split(',');

并显示此字符串 Number1 = 45

让我们一点点LINQ来做到这一点

C#6语法

var strings = numbers.Split(',').Select((number, i) => $"Number{i + 1} = {number}");
Console.WriteLine(string.Join("\n", strings))

C#&lt; = 5 syntax

var strings = numbers.Split(',').Select((number, i) => string.Format("Number{0} = {1}", i+1, number));
Console.WriteLine(string.Join("\n", strings))

这就是输出

Number1 = 1
Number2 = 2
Number3 = 3
Number4 = 4
Number5 = 5
Number6 = 6

使用inpunt的另一个例子:Foo Bar [45,66]

C#6语法

var numbers = Regex.Match("Foo Bar [45,66]", @"\[(?<numbers>[\d,]+)\]").Groups["numbers"].Value;
var strings = numbers.Split(',').Select((number, i) => $"Number{i + 1} = {number}");
Console.WriteLine(string.Join("\n", strings))

C#&lt; = 5 syntax

var numbers = Regex.Match("Foo Bar [45,66]", @"\[(?<numbers>[\d,]+)\]").Groups["numbers"].Value;
var strings = numbers.Split(',').Select((number, i) => string.Format("Number{0} = {1}", i+1, number));
Console.WriteLine(string.Join("\n", strings))

输出

Number1 = 45
Number2 = 66