C# 如何使用正则表达式在命令行字符串中搜索文件名?
使用C#在.NET4.0中开发。(如果这是长篇大论,很抱歉…) 我想创建一个方法,例如:C# 如何使用正则表达式在命令行字符串中搜索文件名?,c#,.net,regex,pathname,capture-group,C#,.net,Regex,Pathname,Capture Group,使用C#在.NET4.0中开发。(如果这是长篇大论,很抱歉…) 我想创建一个方法,例如: public static string GetCmdLineArgs( string cmdLine, string pathname ) { ... } 我想创建一个Regex模式,让我能够提取可执行文件路径名后的参数。规则: 命令行可能以路径名开头,也可能不以路径名开头 如果路径名存在,它将被引用 路径名将是绝对路径。因此,它将包含正则表达式特殊字符,如“\”、“”,可能还有
public static string GetCmdLineArgs(
string cmdLine,
string pathname )
{
...
}
我想创建一个Regex模式,让我能够提取可执行文件路径名后的参数。规则:
System.String
操作一起破解这个函数,但我也想知道如何使用正则表达式匹配来实现它,以便为将来的更改保留灵活性
基本上,我想做一些事情,比如:
// Create the pattern:
// The pathname is anchored to the beginning of the pattern.
// The pathname group is non-capturing.
// Additional capture groups may be added in the future.
string pattern =
@"^\s*(?:""" + pathname + """)?\s*(.*)";
Regex regex = new Regex( pattern );
Match = regex.Match( cmdLine );
if ( match.Success )
{
// extract matching groups...
}
显然,由于路径名
中存在正则表达式特殊字符,上述操作无法正常工作。有没有什么方法可以修改它,让它像我描述的那样工作?是否有一个分组运算符可以让我匹配未转义的字符串,或者我必须通过转义所有可能的特殊字符来转换路径名
如果有人在其他地方问过或回答过这个问题,请给我指一下那个帖子。谢谢 见。我想这是你唯一缺少的东西。像
string pattern =
@"^\s*(?:""" + Regex.Escape(pathname) + """)?\s*(.*)";
不要使用硬值,而是使用锚类型标记。在这个例子中,我知道-将命令行选项从路径中分割出来,路径有一个“.”,这样我就标记了输出,并可以提取参数的顺序和包含的路径。我使用正则表达式中的If条件(?)从路径项中过滤出命令行参数
string commandLine = @"-abc -log ""C:\Test it"" -def";
// \x22 is the escape for "
string pattern = @"
(?(\x22) # If a " then capture
((?:\x22)(?<Path>[^\x22]+)(?:\x22))
| # Or
((?:-)(?<Command>[^-\s]+)(?:\s?)) # It is a - and capture
)
";
var tokens = Regex.Matches(commandLine, pattern, RegexOptions.IgnorePatternWhitespace)
.OfType<Match>()
.Select (m => new
{
Arg = m.Groups["Command"].Value,
Path = m.Groups["Path"].Value
})
;
string命令行=@“-abc-log”“C:\Test it”“-def”;
//\x22是“的转义”
字符串模式=@“
(?(\x22)#如果是“则捕获”
((?:\x22)(?[^\x22]+)(?:\x22))
|#或
((?:-)(?[^-\s]+)(?:\s?)#它是一个-和捕获
)
";
var tokens=Regex.Matches(命令行、模式、RegexOptions.IgnorePatternWhitespace)
第()类
.选择(m=>new
{
Arg=m.Groups[“命令”]。值,
Path=m.Groups[“Path”].值
})
;
令牌的输出为: