使用 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
将包含数据标签之间的所有信息。请注意,这将搜索第一个 ]
以找到标记的结尾。如果 ]
是有效字符 在 数据标签中,它将不起作用。
我有如下字符串:
这是一些 [[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
将包含数据标签之间的所有信息。请注意,这将搜索第一个 ]
以找到标记的结尾。如果 ]
是有效字符 在 数据标签中,它将不起作用。