2012-01-24 2 views
0

私は、ショートカットのリストを生成する必要がある429個のMFCリソースファイルのリストを用意しています(アンパサンドシンボル例えば「BUTTON "& Close")、これはALT-Cがその特定のダイアログを閉じるためのショートカットであることを示す。リソースファイルから&記号を含むボタンのキャプションで表示されるショートカットのリストを生成する

問題は、リソースファイルのようなフォーマットされた多くの異なるダイアログが含まれていることである:

IDD_VIDEO DIALOG 0, 0, 471, 187 
... 
BEGIN 
    ... 
    PUSHBUTTON  "&Close",IDC_CLOSE,89,166,53,14 
    ... 
END 

私が引き出すしたい形式が「&閉じる」(または、理想的に「ALT-Cのリストになります&「閉じる」)、ショートカット付きの他のラベル、ダイアログが表示されるセクション(IDD_VIDEOなど)正規表現は最高の解決策のようだが、私はこれのために働く正規表現をまだ見つけられていない。

答えて

1

ありがとうございました。これは動作するはずです:

^     # Start of line 
(IDD_\w+)   # Alphanumeric identifier, starting with IDD_ 
\s+DIALOG\b  # followed by "DIALOG" 
((?:(?!^END\b).)*) # and any number of characters unless there's an END in-between 

これは、次のENDまでIDD_whateverからセクション全体にマッチします。

"([^"]*&[^"]*)" # String containing at least one & 

は、ここでC#の例です:その後、その文字列を取ると、それに次の正規表現を適用する必要がある。もちろん、

Regex sectionRegex = new Regex(
    @"^     # Start of line 
    (IDD_\w+)   # Alphanumeric identifier, starting with IDD_ 
    \s+DIALOG\b   # followed by ""DIALOG"" 
    ((?:(?!^END\b).)*) # and any number of characters unless there's an END in-between", 
    RegexOptions.Singleline | RegexOptions.IgnoreCase | RegexOptions.Multiline | RegexOptions.IgnorePatternWhitespace); 

Regex altCRegex = new Regex(
    @"""([^""]*&[^""]*)"" # String containing at least one &", 
    RegexOptions.IgnorePatternWhitespace); 

Match matchResults = sectionRegex.Match(subjectString); 
while (matchResults.Success) { 
    identifier = matchResults.Groups[1].Value; 
    section = matchResults.Groups[2].Value; 
    Match sectionResults = altCRegex.Match(section); 
    while (sectionResults.Success) { 
     altCString = sectionResult.Groups[1].Value; 
     sectionResults = sectionResults.NextMatch(); 
    } 
    matchResults = matchResults.NextMatch(); 
} 

このコードスニペットは、identifieraltCStringで何もしませんが、私はあなたがそのアイディアを得たと思う。

+0

あなたの答えをありがとう。私は現時点では正規表現の文字列をテストするために、メモ帳++を使用していますが、後ですべてのファイルを処理するためのC#ツールをコーディングします。 ダイアログ識別子はすべてIDD_で始まり、DIALOGで終わります(例: "IDD_VIDEO DIALOG 0,42,45,89"または "IDD_MAIN DIALOGEX 0,65,89,89) &を含む文字列の数は、 –

+1

メモ帳++は非常に限定された正規表現サポートを持っています。私が知る限り、正規表現のマッチをサポートしていません –

+0

正規表現を実行するためにC#アプリケーションを作成しましたが、それは印刷するときを除いて非常にうまく動作しているようです"Groups [2]"という値が出てくると、BEGIN/ENDタグの最後の文字列に&を含むBEGIN/ENDタグ内のすべての文字列を表示するときに、 "Groups [0] .Value"ダイアログの最初から最後の文字列に&がダイアログで表示されていることを示していますが、最後の文字列のみを&inで印刷しています。 –