2017-05-07 84 views
2

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

我該如何去做這件事?我看了一些例子,但它們只適用於角色,而不是單詞。

+1

@varun什麼是不正規呢?有3個單詞用2個逗號分隔 – Json

+0

@Enigmativity我需要使用它,但我知道還有其他方法可以做到這一點。但要求是使用正則表達式 – Json

回答

7

這應該做的伎倆:

^(\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 
+0

這個工程!你能解釋一下在這裏做什麼嗎? – Json

+0

'\ 1' * back reference *,詳見http://www.regular-expressions.info/backref.html –

+0

@vyrp非常感謝您的解釋! – Json