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

Find substring within a string using Linq and Regex

我有如下字符串:

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

我需要得到的,是下面的话:

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

有人能帮忙吗?

您可以使用Contains()方法。

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

.*\[\[Data\.(.*)\]\].*[\[Data\.(.*)\]\] 应该给你两组 </code> 和 <code>

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 查找各种 "words"。

正如 dasblinkenlight 所写,还有另一种方法来做正则表达式:

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

这个正则表达式 "stops" 当它找到两个 ]] 时(通过使用负 lookhead),而第一个使用惰性量词来做同样的事情。您必须对它们进行基准测试才能找到最快的(但这仅对大文本块很重要)

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

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

捕获data将包含数据标签之间的所有信息。请注意,这将搜索第一个 ] 以找到标记的结尾。如果 ] 是有效字符 数据标签中,它将不起作用。