我试图创建一个匹配同一个单词3次的正则表达式,它们之间用逗号分隔。例如,一些输入将是:正则表达式找到3个重复单词
HEY,HEY,HEY - match
NO,NO,NO - match
HEY,HI,HEY - no match
HEY,H,Y - no match
HEY,NO,HEY - no match
我该如何去做这件事?我看了一些例子,但它们只适用于角色,而不是单词。
我试图创建一个匹配同一个单词3次的正则表达式,它们之间用逗号分隔。例如,一些输入将是:正则表达式找到3个重复单词
HEY,HEY,HEY - match
NO,NO,NO - match
HEY,HI,HEY - no match
HEY,H,Y - no match
HEY,NO,HEY - no match
我该如何去做这件事?我看了一些例子,但它们只适用于角色,而不是单词。
这应该做的伎俩:
^(\w+),\1,\1$
说明:
^
:该行的开头。需要避免匹配“HHEY,HEY,HEY”。
(\w+)
:匹配一个或多个单词字符。这是第一个被捕的团体。
,
:字符逗号。
\1
:对第一个捕获组的反向引用。换句话说,匹配之前匹配的所有匹配的内容为(\w+)
。
,
:字符逗号。
\1
:对第一个捕获组的反向引用。
$
:行结束。需要避免匹配“HEY,HEY,HEYY”。
来源: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
@varun什么是不正规呢?有3个单词用2个逗号分隔 – Json
@Enigmativity我需要使用它,但我知道还有其他方法可以做到这一点。但要求是使用正则表达式 – Json