如何使用正则表达式从文本到数组中提取少量值

时间:2012-03-19 12:24:18

标签: c# regex

我有这种模式的文本文件:

红狐狸获得了number1袜子:number2和:number3

红狐狸获得了number4袜子:number5和:number6

红狐狸获得了7号袜子:number8和:number9 ...

我需要从每一行中提取所有numberx并将其放在数组中,如:

[数字1,数字,number3的]

[号码4,5号,number6]

[number7,number8,number9]

我正在使用C#。

感谢

4 个答案:

答案 0 :(得分:1)

你的正则表达式是: "Red fox got ([0-9]+) socks: ([0-9]+) and: ([0-9]+)"

答案 1 :(得分:1)

没有正则表达式的解决方案:

string input = "Red fox got 1 socks: 22 and: 333";

string[] split = input.Split(' ');

string output = string.Format("[{0},{1},{2}]", split[3], split[5], split[7]);

将逻辑置于循环中,并为每个输入将输出添加到列表或数组中。

答案 2 :(得分:0)

class Program
{
    static void Main()
    {
        var input = File.ReadAllLines("test.txt");
        var result = input
            .Select(
                line => Regex.Matches(line, @"\d+")
                             .OfType<Match>()
                             .Select(m => m.Groups[0].Value)
            );
        foreach (string[] numbers in result)
        {
            Console.WriteLine(string.Join(",", numbers));
        }
    }
}

给出以下输入文件:

Red fox got 1 socks: 2 and: 3
Red fox got 4 socks: 5 and: 6
Red fox got 7 socks: 8 and: 9

程序打印:

1,2,3
4,5,6
7,8,9

答案 3 :(得分:0)

你去吧

using System.Text.RegularExpressions;

foreach(var match in Regex.Matches(theText, "[0-9]+")
{
    var number = int.Parse(match.Value);
}

将允许您迭代文本中的所有数字。如果你想要三合一,

IEnumerable<Tuple<int,int,int>> NumberTripletsFromText(string theText)
{
    var results = new List<int>;
    var count = 0;

    foreach(var match in Regex.Matches(theText, "[0-9]+")
    {
        count++;
        results.Add(int.Parse(match.Value);

        if (count == 3)
        {
            yield return Tuple.Create(results[1], results[2], results[3]);
            results.Clear;
            count = 0;
        }
    }

    if (results > 0)
    {
       //Handle non divisible by three.
    }
}