使用Linq和Regex查找字符串中的子字符串

时间:2015-02-23 14:53:11

标签: c# regex linq lambda

我有一个字符串如下:

这是某[[Data:Next]]字符串的[[Data:Example]]。

我需要得到的是以下词语:

  • 示例
  • 下一步

我可以通过找到第一次出现 [[数据并继续循环直到找到]] ;但我知道这也可以用LINQ + REGEX表达式完成。

有人可以帮忙吗?

4 个答案:

答案 0 :(得分:3)

Regex rx = new Regex(@"\[\[Data:(.*?)\]\]");
Group[] groups = rx.Matches("This is [[Data:Example]] of some [[Data:Next]] string.")
    .OfType<Match>()
    .Select(x => x.Groups[1])
    .ToArray();

foreach (Group gr in groups) {
    Console.WriteLine(gr.ToString());
}

这将使用Regex + Linq查找各种“单词”。

正如dasblinkenlight所写,还有另一种方法可以使用正则表达式:

Regex rx = new Regex(@"\[\[Data:((?:(?!\]\]).)*)\]\]");

这个正则表达式在找到两个]](通过使用负面看起来)时“停止”,而第一个使用惰性量词来执行相同操作。你必须对它们进行基准测试以找到最快的(但这对于大块文本来说很重要)

答案 1 :(得分:0)

您可以使用Contains()方法。

string longer = "this id my longer string";
string find = "longer";
if(longer.Contains(find))

答案 2 :(得分:0)

.*\[\[Data\.(.*)\]\].*[\[Data\.(.*)\]\]应该为您提供两个小组$1$2

答案 3 :(得分:0)

您可以使用此正则表达式匹配:

\[\[Data\:(?<data>([^\]]+))\]\]

捕获data将包含数据标记之间的所有信息。请注意,这将搜索第一个]以查找标记的结尾。如果]是数据标记内的有效字符,则无效。