2012-08-03 251 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.