正则表达式匹配包含括号的字符串

时间:2012-08-03 21:45:37

标签: c# regex

我正在读取文件并通过检查每一行来验证文件的内容。字符串行如下所示:

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);
}  

但是这不会检查括号之间的内容,也不会检查结束括号。

3 个答案:

答案 0 :(得分:2)

这应该适合你:

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

第一组匹配冒号前的部分,第二组匹配[] s中的部分。

第一部分可以是任何大写字母或下划线,第二部分可以是任何个案的任何字母数字字符,或下划线。

此外,您可以使用以下附加功能,这些附加功能需要使^ $匹配EOL而不仅仅是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 _

答案 1 :(得分:0)

尝试使用此功能:^\w+:\s*\[(\w+)\]\w将匹配字母,数字和下划线 另一种模式只匹配大写:^[A-Z\d_]+:\s*\[([A-Z\d_]+)\]

答案 2 :(得分:0)

您尝试了^CMD: \[,但您的Regex包含空格。请注意,在正则表达式中,您必须使用\s来匹配空格。试试你的正则表达式,但使用\s

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

解释

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