我試圖創建一個匹配同一個單詞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