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

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

4

3 回答 3

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 _
于 2012-08-03T21:49:02.667 回答
0

试试这个: ^\w+:\s*\[(\w+)\]\w将匹配字母、数字和下划线
,另一个模式将只匹配大写:^[A-Z\d_]+:\s*\[([A-Z\d_]+)\]

于 2012-08-03T21:55:20.340 回答
0

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

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

解释:

\s    Matches any white-space character.
*     Matches the previous element zero or more times. 
于 2012-08-04T08:20:32.647 回答