我正在读取文件并通过检查每一行来验证文件的内容。字符串行如下所示:
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);
}
但是这不会检查括号之间的内容,也不会检查结束括号。
答案 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.