C# 具有2个匹配项的单个正则表达式
给定路径C# 具有2个匹配项的单个正则表达式,c#,.net,regex,C#,.net,Regex,给定路径 C:\Users\Bob\Downloads\Product12\Prices\USD 并且只知道它包含一个子目录,名为Downloads 我有这个正则表达式来定位下载部分 (?<=Downloads\\)[^\\""]* (?这将匹配一个子组中“下载”之前的所有内容,以及另一个子组中“下载”之后的所有内容: /^(.*?Downloads\\)(.*)$/ 因此,给定示例输入,您希望获得Product12\Prices\USD,对吗 result = Regex.Matc
C:\Users\Bob\Downloads\Product12\Prices\USD
并且只知道它包含一个子目录,名为Downloads
我有这个正则表达式来定位下载部分
(?<=Downloads\\)[^\\""]*
(?这将匹配一个子组中“下载”之前的所有内容,以及另一个子组中“下载”之后的所有内容:
/^(.*?Downloads\\)(.*)$/
因此,给定示例输入,您希望获得Product12\Prices\USD
,对吗
result = Regex.Match(s, @"\\Downloads\\(.*)$").Groups[1].Value;
但是正则表达式中的[\\”“]*
似乎表明您的路径包含在引号中,您不希望与结束引号或其后的任何内容匹配
result = Regex.Match(s, @"\\Downloads\\([^""]*)""").Groups[1].Value;
特别值得注意的是:
- 在C#中创建正则表达式时,尽可能使用C#的逐字字符串表示法(即,
@“regex”
)。这样您就不必在代码中乱丢一堆反斜杠。例如,如果您的正则表达式是标准的C样式字符串文字,则必须在正则表达式中使用四个反斜杠来匹配一个反斜杠输入
- 当您在SO的帖子中包含正则表达式时,请按它们在代码中的显示方式显示它们。这样我们就不必猜测反斜杠的含义了。例如,
[^\\\\\\\
中的\\\\
应该与文本反斜杠匹配,还是您只是为了正则表达式而转义
- 说到引号,
“
在正则表达式中没有特殊意义,因此您不必为此而转义。我将该序列更改为[^”“]*
,因为这就是逐字字符串中转义引号的方式。在C样式的字符串文字中,它将是[\\”]*
解析路径不需要正则表达式
var paths = new Uri(@"C:\Users\Bob\Downloads\Product12\Prices\USD").Segments;
将返回所有段,您可以跳过直到下载
var paths = new Uri(@"C:\Users\Bob\Downloads\Product12\Prices\USD")
.Segments
.SkipWhile(s => s != "Downloads/")
.Skip(1)
.ToList();
这似乎与以下内容相匹配:第一组-下载之前的所有内容,第二组-下载之后的所有内容,但我刚刚意识到我的问题是错误的。我应该编辑或创建另一个问题吗?