我试图创建一个与同一个词匹配3次的正则表达式,它们用逗号分隔。例如,一些输入将是:
HEY,HEY,HEY - match
NO,NO,NO - match
HEY,HI,HEY - no match
HEY,H,Y - no match
HEY,NO,HEY - no match
我该怎么做呢?我看过一些例子,但它们只对字符有益,而不是单词。
答案 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