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

C# 使用Linq和Regex查找字符串中的子字符串,c#,regex,linq,lambda,C#,Regex,Linq,Lambda,我有一个字符串,如下所示: 这是一些[[Data:Next]]字符串的[[Data:Example]]部分。 我需要得到的是以下文字: 范例 下一个 我可以通过查找第一次出现的[[Data并继续循环,直到找到];然而,我知道这也可以通过LINQ+REGEX表达式实现 有人能帮忙吗?您可以使用Contains()方法 string longer = "this id my longer string"; string find = "longer"; if(longer.Contains(fi

我有一个字符串,如下所示:

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

我需要得到的是以下文字:

  • 范例
  • 下一个
我可以通过查找第一次出现的[[Data并继续循环,直到找到];然而,我知道这也可以通过LINQ+REGEX表达式实现


有人能帮忙吗?

您可以使用
Contains()
方法

string longer = "this id my longer string";
string find = "longer";
if(longer.Contains(find))
*\[\[Data\.(.*)\]\].[\[Data\.(.*)\]\].
应该给你两组
$1
$2

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());
}

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

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

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

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

为什么要使用linq进行字符串操作?您尝试了什么?给我们一些代码。这实际上是正则表达式的一个很好的例子。我不知道你为什么认为LINQ会帮助你。不一定是LINQ,但LINQ提供了简化的foreach循环…这就是为什么我完全忘记了正则表达式!谢谢,但我需要的是这些单词的列表,而不是检查它们是否正确exist@RobertJ. 如果你需要这些单词的列表。。然后查看列表的
Add方法是如何工作的,并对您的终端进行更多的研究。。编辑你的问题以表达你的需要,否则这里的答案是正确的。。更新你的原始问题我投票结束这个问题,因为你还不清楚加上一个问题,因为regex和linq:)这正是我想要的for@dasblinkenlight不,不会的。如果有两个“连续”]],而不是一个,则它将中断。它将与下一个匹配[i]=j@xanatos哦,我看到你有一个不情愿的限定词。这可能会导致很多回溯,但它会起作用。
\[\[Data\:(?<data>([^\]]+))\]\]