2012-08-03 252 views
0

我正在讀取文件並通過檢查每行來驗證文件的內容。串線是這樣的:正則表達式匹配包含括號的字符串

CMD: [THIS_IS_THE_CMD]
DELAY: [5]
FLAGS: [ANY]

所有我需要檢查爲該線以下,準確的形式,什麼是在括號之間或者是文本(我已經試過[ A-Z_],但它不工作)或取決於線路的數字。
我有什麼至今:

string line = "CMD: [THIS_IS_THE_CMD]"; 
if(!VerifyLine(@"^CMD: \[", line)) 
{ 
    // No match, set error  
} 

private static bool VerifyLine(string regExp, string line) 
{ 
    Regex reg = new Regex(regExp); 
    return reg.IsMatch(line); 
} 

但這並不括號之間檢查內容,並沒有檢查右括號。

回答

2

這應該爲你做它:

([A-Z_]*):\s*\[(\w*)\] 

第一組部分冒號前一致,第二個[]裏內的部分相匹配。

第一部分可以是任何大寫字母或下劃線,第二部分可以是任何情況下的任何字母數字字符或下劃線。

此外,您可以使用下面的羣衆演員,這需要讓^ $匹配EOLS而不是隻BOF和EOF的選項:您可以使用您的具體文件組捕捉

^([A-Z_]*):\s*\[(\w*)\]$  // will only match whole lines 
^\s*([A-Z_]*):\s*\[(\w*)\]\s*$ // same as above but ignores extra whitespace 
           // on the beginning and end of lines 

不同的東西格式:

[A-Z]  // matches any capital letter 
[A-Za-z] // matches any letter 
[A-Za-z0-9] // matches any alphanumeric character 
\w   // matches any "word character", which is any alnum character or _ 
+0

您可能要添加'^'和'$',以保證整條生產線相匹配,而不只是該行包含正則表達式和'?:'不捕獲任何組(因爲它們不會被使用)。 – R0MANARMY 2012-08-03 21:58:49

+0

這是我的一個演員。我會離開小組,因爲誰知道,他可能會在稍後使用它們。 – Wug 2012-08-03 22:00:55

0

嘗試這樣的:^\w+:\s*\[(\w+)\]\w將匹配字母,數字和下劃線
和另一種模式將只匹配大寫:^[A-Z\d_]+:\s*\[([A-Z\d_]+)\]

0

您試過^CMD: \[,但您的Regex包含空間。請注意,在正則表達式中,您必須使用\s來匹配空格。試試你的正則表達式,但使用\s

if(!VerifyLine(@"^CMD:\s*\[", line)) 
    ... 

解釋:

\s Matches any white-space character. 
*  Matches the previous element zero or more times.