.net 如果特定字符串在一行中出现多次,则正则表达式匹配一行
我知道如何在一行中搜索两个不同的特定字符串,但不知道如何检查一个特定字符串在一行中是否出现多次。这能做到吗?它是匹配整行还是匹配字符串本身对我来说并不重要 例如: 我想指定'Spani'并使其匹配 西班牙人说西班牙语 但是不是: 西班牙人说德语 这样的事情可以用我不知道的正则表达式来完成吗?如果没有,是否有方法检查反向,这基本上是一样的:.net 如果特定字符串在一行中出现多次,则正则表达式匹配一行,.net,regex,visual-studio-2015,.net,Regex,Visual Studio 2015,我知道如何在一行中搜索两个不同的特定字符串,但不知道如何检查一个特定字符串在一行中是否出现多次。这能做到吗?它是匹配整行还是匹配字符串本身对我来说并不重要 例如: 我想指定'Spani'并使其匹配 西班牙人说西班牙语 但是不是: 西班牙人说德语 这样的事情可以用我不知道的正则表达式来完成吗?如果没有,是否有方法检查反向,这基本上是一样的: 一个特定的字符串在一行中只出现一次吗?这似乎很简单: Spani.+Spani 假设变量中有“Spani” var toMatch = "Spani";
一个特定的字符串在一行中只出现一次吗?这似乎很简单:
Spani.+Spani
假设变量中有“Spani”
var toMatch = "Spani";
var pattern = $"{toMatch}.+{toMatch}";
(不要在
toMatch
中包含正则表达式特殊字符)你可以构建一个类似于@Steven Doggart在上面的评论中所提到的正则表达式,这样你就可以得到:^.*(Spani.*){2}$
您应该使用以确保不搜索任何正则表达式保留字符
using System.Text.RegularExpressions;
public bool HasMatches(string input, string search, int times)
{
var pattern = $"^.*({Regex.Escape(search)}.*){{{times}}}";
return Regex.IsMatch(input, pattern, RegexOptions.Multiline);
}
然后像这样运行它:
var input = "The Spaniard speaks Spanish";
HasMatches(input, "Spani", 2);
input = "The Spaniard speaks German";
HasMatches(input, "Spani", 2);
input = "The Spaniard speaks Spanish" + Environment.NewLine + "The Spaniard speaks German";
HasMatches(input, "Spani", 2);
^.*(Spani.*{2}$
启用多行选项后,如何返回长度为n且出现多个Regex.Escape
-很好!你真的需要开头的^..*
吗?不,实际上可能不需要。这只是将“一行中”的要求直译成正则表达式。