我的字符串如下所示:“1y 250 2y 32% 3y otherjibberish”。
我的最终目标是将其拆分为以下内容:“1y 250”“2y 32%”“3y otherjibberish”
这些拆分之间的主要“分隔符”是“\d+y”模式。使用 Regex (C# 4.0),我可以使用 Matches 函数来匹配一个后跟一个“y”的数字,但我不知道如何获取该匹配之后但在下一个匹配之前的所有内容。
有没有办法做到这一点?
希望这是有道理的......非常感谢 - kcross
您可以使用“MatchCollection”根据出现的情况拆分字符串。下面的示例几乎可以满足您的要求。每个字符串右侧的空白字符不会被删除。
代码:
using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
namespace Q11438740ConApp
{
class Program
{
static void Main(string[] args)
{
string sourceStr = "1y 250 2y 32% 3y otherjibberish";
Regex rx = new Regex(@"\d+y");
string[] splitedArray = SplitByRegex(sourceStr, rx);
for (int i = 0; i < splitedArray.Length; i++)
{
Console.WriteLine(String.Format("'{0}'", splitedArray[i]));
}
Console.ReadLine();
}
public static string[] SplitByRegex(string input, Regex rx)
{
MatchCollection matches = rx.Matches(input);
String[] outArray = new string[matches.Count];
for (int i = 0; i < matches.Count; i++)
{
int length = 0;
if (i == matches.Count - 1)
{
length = input.Length - (matches[i].Index + matches[i].Length);
}
else
{
length = matches[i + 1].Index - (matches[i].Index + matches[i].Length);
}
outArray[i] = matches[i].Value + input.Substring(matches[i].Index + matches[i].Length, length);
}
return outArray;
}
}
}
输出:
'1y 250 '
'2y 32% '
'3y otherjibberish'
“解决方案”7z 文件:Q11438740ConApp.7z
这实际上很容易......只需使用 Regex.Split() 方法。