我有一个字符串如下:
这是某[[Data:Next]]字符串的[[Data:Example]]。
我需要得到的是以下词语:
我可以通过找到第一次出现 [[数据并继续循环直到找到]] ;但我知道这也可以用LINQ + REGEX表达式完成。
有人可以帮忙吗?
答案 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
将包含数据标记之间的所有信息。请注意,这将搜索第一个]
以查找标记的结尾。如果]
是数据标记内的有效字符,则无效。