如果特定字符串在一行中出现多次,则正则表达式匹配一行

时间:2017-07-12 22:09:31

标签: .net regex visual-studio-2015

我知道如何在一行中搜索两个不同的特定字符串,但不知道如何检查单个特定字符串是否在一行中出现多次。可以这样做吗?它是否匹配整行或者它是否与字符串本身匹配对我来说并不重要。

示例:

我想指定'Spani'并使其匹配

  

西班牙人讲西班牙语

不是:

  

西班牙人说德语

这样的事情可以用我不知道的Regex完成吗?如果没有,有没有办法检查逆,这基本上是相同的事情:

特定字符串是否仅在一行中出现一次?

2 个答案:

答案 0 :(得分:2)

看起来很简单:

Spani.+Spani

假设你有"西班牙语"在一个变量

var toMatch = "Spani";

var pattern = $"{toMatch}.+{toMatch}";

(不要在toMatch中包含正则表达式特殊字符。)

答案 1 :(得分:1)

你可以构建一个类似于@Steven Doggart上面评论中所述的正则表达式,这样你最终得到:^.*(Spani.*){2}$

您应该使用Regex.Escape来确保不搜索任何正则表达式保留字符。

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