正则表达式匹配所有字符在另一个正则表达式匹配之后

时间:2012-12-17 23:24:01

标签: c# regex

我知道这听起来有点令人困惑,所以我愿意接受有关重命名标题的建议。

基本上我有C:... \ Downloads \ Folder \ SubFolder \ SubSubFolder等字符串。我想只返回SubFolder和SubSubFolder。

到目前为止,我的正则表达式看起来像(?=\\Downloads\\.*?\\).*,匹配Downloads\Folder\SubFolder\SubSubFolder

有没有人有任何想法我错过了什么????

以下所有解决方案似乎都有效(除非您不知道“文件夹”)。可能是我用来测试正则表达式的工具的错误。

4 个答案:

答案 0 :(得分:2)

您需要匹配字符串的结尾和非反斜杠序列:

/([^\\]+)\\([^\\]+)$/

答案 1 :(得分:2)

你错过了一个<。你需要一个后视((?<=...)),但你有一个前瞻((?=...))。

换句话说,您需要(?<=\\Downloads\\.*?\\).*

答案 2 :(得分:1)

这不是正则表达式,但这是我如何做的。

string marker = @"\Downloads\Folder\";
int i = path.IndexOf(marker);
if (i >= 0)
    return path.Substring(i + marker.Length);

答案 3 :(得分:1)

以下正则表达式将在正则表达式匹配中返回两个命名组(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;