在我看来,“user2828970”提出了一个带有示例的问题,而不是他想要解析的文字文本。在我看来,他很可能会问这个问题:
我正在尝试使用正则表达式来拆分这样的字符串。
var exampleSentence = "I had 185 birds but 20 of them flew away";
var regexSplit = Regex.Split(exampleSentence, @"\d+");
regexSplit 的结果是:I had、birds but、of them flew away。
但是,我也想知道导致 second 字符串与其前面的文本分离的值,以及导致 third 字符串分离的值来自 its 前面的文本。即:我想知道185 和20。
字符串可以是任何东西,分割的模式可以是任何东西。答案不应包含硬编码值。
嗯,这个简单的函数将执行该任务。可以优化代码以编译正则表达式,或重新组织以返回多个集合或不同的对象。但这(几乎)是我在生产代码中使用它的方式。
public static List<Tuple<string, string>> RegexSplitDetail(this string text, string pattern)
{
var splitAreas = new List<Tuple<string, string>>();
var regexResult = Regex.Matches(text, pattern);
var regexSplit = Regex.Split(text, pattern);
for (var i = 0; i < regexSplit.Length; i++)
splitAreas.Add(new Tuple<string, string>(i == 0 ? null : regexResult[i - 1].Value, regexSplit[i]));
return splitAreas;
}
...
var result = exampleSentence.RegexSplitDetail(@"\d+");
这将返回一个如下所示的集合:
{ null, "I had "}, // First value, had no value splitting it from a predecessor
{"185", " birds but "}, // Second value, split from the preceding string by "185"
{ "20", " of them flew away"} // Third value, split from the preceding string by "20"