我有这种模式的文本文件:
红狐狸获得了number1袜子:number2和:number3
红狐狸获得了number4袜子:number5和:number6
红狐狸获得了7号袜子:number8和:number9 ...
我需要从每一行中提取所有numberx并将其放在数组中,如:
[数字1,数字,number3的]
[号码4,5号,number6]
[number7,number8,number9]
我正在使用C#。
感谢
答案 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.
}
}