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*)\]

最初のグループはコロンの前の部分に一致し、2 番目のグループは [] 内の部分に一致します。

最初の部分は任意の大文字またはアンダースコア、2 番目の部分は任意の大文字小文字の英数字またはアンダースコアです。

さらに、BOF と EOF だけでなく、^$ を EOL に一致させるオプションを必要とする、次のエクストラを使用することもできます。

^([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: \[ましたが、SpaceRegexが含まれています。正規表現では、一致する空白に使用する必要があることに注意してください。あなたの正規表現を試してみてください。\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 に答える