使用C#在.NET 4.0中開發。 (很抱歉,如果這是囉嗦......)如何使用Regex在命令行字符串中搜索文件名?
我想創建一個方法,如:
public static string GetCmdLineArgs(
string cmdLine,
string pathname)
{
...
}
我想創建一個正則表達式模式,可以讓讓我後提取的參數可執行文件的路徑名。規則:
- 命令行可能會或可能不會引用路徑名。
- 如果路徑名存在,它將被引用。
- 路徑名將是絕對路徑。因此,它將包含正則表達式特殊字符,如「\」,「。」,以及其他可能的字符。
- 如果引用的路徑名沒有出現在命令行的開頭,只需捕獲並返回命令行,而不是任何前導空格。
- 路徑名也可能出現在參數中。如果是這樣,這些事件應該被保留下來,並與其餘的論點一起返回。
- 應該放棄引導路徑名稱周圍的空白字符。
- 現在,只需返回單個字符串中的所有參數即可,但將來可能會添加特定參數的捕獲組。
我意識到,我可以通過簡單的操作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...
}
顯然,上述將無法正常工作,是因爲正則表達式特殊字符pathname
存在。有沒有一些方法可以修改它,以便像我所描述的那樣工作?是否有一個分組操作符可以讓我匹配未轉義的字符串,還是我必須通過轉義所有可能的特殊字符來轉換pathname
?
如果此問題已在其他地方提出並回答,請將我指向該帖子。謝謝!
賓果感謝您的快速答覆雅lern sumthin'野應埃夫裏的一天... –