正则表达式找到3个重复的单词

时间:2017-05-07 11:15:52

标签: c# regex

我试图创建一个与同一个词匹配3次的正则表达式,它们用逗号分隔。例如,一些输入将是:

HEY,HEY,HEY - match
NO,NO,NO - match
HEY,HI,HEY - no match
HEY,H,Y - no match
HEY,NO,HEY - no match

我该怎么做呢?我看过一些例子,但它们只对字符有益,而不是单词。

1 个答案:

答案 0 :(得分:7)

这应该可以解决问题:

^(\w+),\1,\1$

说明:

^:行的开头。需要避免匹配“HHEY,HEY,HEY”。

(\w+):匹配一个或多个单词字符。这是第一个被捕获的小组。

,:字符逗号。

\1:对第一个捕获组的反向引用。换句话说,匹配(\w+)之前匹配的任何内容。

,:字符逗号。

\1:对第一个捕获组的反向引用。

$:行尾。需要避免匹配“嘿,嘿,嘿”。

来源:https://msdn.microsoft.com/en-us/library/az24scfc(v=vs.110).aspx#Anchor_5

使用示例

static void Main()
{
    var threeWords = new Regex(@"^(\w+),\1,\1$");
    var lines = new[]
    {
        "HEY,HEY,HEY",
        "NO,NO,NO",
        "HEY,HI,HEY",
        "HEY,H,Y",
        "HEY,NO,HEY",
        "HHEY,HEY,HEY",
        "HEY,HEY,HEYY",
    };

    foreach (var line in lines)
    {
        var isMatch = threeWords.IsMatch(line) ? "" : "no ";
        Console.WriteLine($"{line} - {isMatch}match");
    }
}

输出:

HEY,HEY,HEY - match
NO,NO,NO - match
HEY,HI,HEY - no match
HEY,H,Y - no match
HEY,NO,HEY - no match
HHEY,HEY,HEY - no match
HEY,HEY,HEYY - no match