1

これは少し紛らわしいように聞こえるかもしれませんので、タイトルの名前を変更することを提案します。

基本的に、C:... \ Downloads \ Folder \ SubFolder\SubSubFolderなどの文字列があります。SubFolderとSubSubFolderのみを返したいのですが。

(?=\\Downloads\\.*?\\).*これまでのところ、私の正規表現はに一致するように見えDownloads\Folder\SubFolder\SubSubFolderます。

誰かが私が欠けているアイデアを持っていますか????

以下のすべての解決策は機能しているようです(「フォルダ」を知らなかった場合を除く)。正規表現をテストするために使用していたツールのバグである可能性があります。

4

4 に答える 4

2

文字列の末尾とバックスラッシュ以外のシーケンスを一致させる必要があります。

/([^\\]+)\\([^\\]+)$/
于 2012-12-17T23:35:45.113 に答える
2

が1つ欠けています<。後読み((?<=...))が必要ですが、先読み((?=...))があります。

つまり、が必要(?<=\\Downloads\\.*?\\).*です。

于 2012-12-17T23:36:38.010 に答える
1

正規表現ではありませんが、これが私が行う方法です。

string marker = @"\Downloads\Folder\";
int i = path.IndexOf(marker);
if (i >= 0)
    return path.Substring(i + marker.Length);
于 2012-12-17T23:28:59.900 に答える
1

次の正規表現は、正規表現の一致で2つの名前付きグループ(sub、subsub)を返します。

(?<=\\Downloads\\[^\\]+\\)(?<sub>[^\\]+)\\(?<subsub>[^\\]+)

グループの取得:

var regex = new Regex(@"(?<=\\Downloads\\[^\\]+\\)(?<sub>[^\\]+)\\(?<subsub>[^\\]+)");
var match = regex.Match(@"C:\...");
var sub = match.Groups["sub"].Value;
var subsub = match.Groups["subsub"].Value;
于 2012-12-17T23:34:09.810 に答える