0

同様の形式 (実際にはファイル パス) の行がいくつかあります。例えば:

root/DATA/some/file.txt
root/DATA/another/file.txt
root/DATA/yet/another/file.exe
root/site/some/other/folder/before/DATA/file.xml
root/site/some/other/folder/DATA/file2.xml

の前に 1 つのスラッシュ を含むものだけを取得したいと思いますDATA。つまり、上記の最初の 3 つは一致する必要がありますが、最後の 2 は一致しないはずです。注:は、とrootを除く一連の文字であると想定されています。/\

最終的にこの正規表現になりましたが、それでも 5 つのサンプルすべてに一致します。

[^/]*/data/.*

そして、私はここで立ち往生しています...DATA最初のスラッシュの後に明示的に続いていない場合に備えて、行を除外するように指示する方法は?

4

4 に答える 4

3

これで問題が解決するはずです:

^[^/]*/DATA/.*$
于 2012-07-13T09:48:12.797 に答える
0

行の開始をマークする必要があります。

^[^/]*/data/.*

また、正規表現が複数行モードであり、大文字と小文字が無視されることを確認してください

于 2012-07-13T09:46:26.810 に答える
0

多くのオプションがあります-たとえば、すべてのDATAをキャプチャし、後でテキストDATAの前にある要素「/」の数を確認できます(たとえば、最初のグループ)。より長い文字列などを確認できます-コードを使用してシミュレートして再利用できる、まさにあなたが要求したもの:

string type_1 = "" +
    "root/DATA/some/file.txt" + "\n" +
    "root/DATA/another/file.txt" + "\n" +
    "root/DATA/yet/another/file.exe" + "\n" +
    "root/site/some/other/folder/before/DATA/file.xml" + "\n" +
    "root/site/some/other/folder/DATA/file2.xml";

Console.WriteLine ("Start TEXT:");
Console.WriteLine (type_1);


Console.WriteLine ("Result TEXT:");
MatchCollection mat = Regex.Matches (type_1, "^[^/]*/DATA.*?$", RegexOptions.Compiled|RegexOptions.Multiline);
Console.WriteLine (mat.Count);
foreach (Match m in mat) {
    Console.WriteLine (m.ToString ());  
}

その作業の結果は次のとおりです。

Start TEXT:
root/DATA/some/file.txt
root/DATA/another/file.txt
root/DATA/yet/another/file.exe
root/site/some/other/folder/before/DATA/file.xml
root/site/some/other/folder/DATA/file2.xml
Result TEXT:
3
root/DATA/some/file.txt
root/DATA/another/file.txt
root/DATA/yet/another/file.exe

最初の 'DATA' の前に '/' が存在しないと仮定することで機能します。

于 2012-07-13T10:36:39.243 に答える
0
Regex regex = new Regex("^[^/]*/data/.*",
                        RegexOptions.IgnoreCase|RegexOptions.Multiline);
于 2012-07-13T09:53:29.043 に答える