[英]Matching a string with and without quotes with Regex
嘿,我知道有很多問題要與Regex匹配報價,但我嘗試過的幾個問題還沒有使我走得很遠...我認為這只是Regex的一個新案例
基本上,我正在解析unix grep命令字符串,需要提取所有grep的內容。 一個例子:
cat theLogFile | grep "some stuff" | grep moreStuffWithRandomChars*&^^#&@_+ | grep "stuff" | grep thing2
我希望結果是:
"some stuff"
moreStuffWithRandomChars*&^^#&@_+
"stuff"
thing2
謝謝大家!
此模式將以下結果作為第一組返回
字符串regexPattern = @“ grep(。*?)(\\ || $)”;
“一些東西”
更多StuffWithRandomChars *&^^#&@ _ +
“東西”
事2
這是一個如何使用它的示例:
try
{
Regex regex = new Regex(@"grep (.*?)( \||$)");
Match grepStrings = regex.Match(commandline);
while (grepStrings.Success)
{
// matched text: grepStrings.Value
// match start: grepStrings.Index
// match length: grepStrings.Length
grepStrings = grepStrings.NextMatch();
}
}
catch (ArgumentException ex)
{
// Syntax error in the regular expression
}
我不知道這是否可以滿足您的所有需求,但是這里有一個指針:您可以像這樣拆分字符串:
Regex.Split(string, "| grep ")
然后丟掉第一部分。
您需要使用正則表達式嗎? 為什么不這樣做呢?
var cmdStr = @"cat theLogFile | grep ""some stuff"" | grep moreStuffWithRandomChars*&^^#&@_+ | grep ""stuff"" | grep thing2";
var results = cmdStr.Split('|')
.Select(s => s.Trim())
.Where(s => s.StartsWith("grep ", StringComparison.OrdinalIgnoreCase))
.Select(s=> s.Substring(5))
.ToList();
// { "some stuff", moreStuffWithRandomChars*&^^#&@_+, "stuff", thing2 }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.