使用Regex匹配带引号和不带引号的字符串

时间:2011-04-07 19:57:08

标签: c# regex .net-4.0

嘿所有,我知道有很多问题可以与Regex匹配引号,但是我尝试的少数几个还没有让我走远......我认为它只是一个新的Regex案例

基本上我正在解析一个unix grep命令字符串,需要提取所有grep'ed的东西。一个例子:

cat theLogFile | grep "some stuff" | grep moreStuffWithRandomChars*&^^#&@_+ | grep "stuff" | grep thing2

我希望结果如下:

"some stuff"
moreStuffWithRandomChars*&^^#&@_+
"stuff"
thing2

全部谢谢!

3 个答案:

答案 0 :(得分:3)

此模式将以下结果作为第一组返回

  

string regexPattern = @“grep(。*?)(\ || $)”;

“一些东西”

moreStuffWithRandomChars *安培; ^^#&安培; @ _ +

“东西”

thing2

以下是如何使用它的示例:

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
}

答案 1 :(得分:2)

我不知道这是否能满足您的所有需求,但这里有一个指针:您可以像这样拆分字符串:

Regex.Split(string, "| grep ")

然后扔掉第一部分。

答案 2 :(得分:0)

您需要使用正则表达式吗?为什么不这样做?

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 }