簡體   English   中英

用正則表達式匹配帶引號和不帶引號的字符串

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM