2011-04-07 130 views
1

嘿,所有的,我知道有很多问题用于与正则表达式进行匹配,但是我尝试过的很少的问题还没有得到我很远......我认为它只是一个情况是新的正则表达式与正则表达式匹配字符串和不带引号的字符串

基本上我解析一个unix grep命令字符串,并需要拔出所有grep'ed的东西。举个例子:

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

,我想结果是:

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

谢谢大家!

+0

谢谢大家的建议! – Hershizer33 2011-04-07 20:14:51

回答

3

这种模式返回下面作为第一组

串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 
} 
+0

这很好,谢谢! – Hershizer33 2011-04-07 20:14:35

+0

非常感谢您的回答,但是如果您有第二个问题,您是否介意解释Regex声明是如何理解的?我想得到一个点,我不需要问这么多正则表达式问题哈哈。 (只是正则表达式模式,我与匹配和什么都不能conf) – Hershizer33 2011-04-07 20:44:44

+0

@ Hershizer33这里是一张图片,解释正则表达式 [grep(。*?)(\ || $)](http://dl.dropbox.com/u /9439326/grepregex.jpg) – FRoZeN 2011-04-08 01:06:48

2

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

Regex.Split(string, "| grep ") 

,然后扔掉的第一部分。

+0

也许我做错了,但这个: 列表 greps =新列表(Regex.Split(sender.ToString(),“| \\ s + grep \\ s +”)); 使greps包含输入字符串,空格和所有的每个字符 – Hershizer33 2011-04-07 20:08:12

+0

@ Hershizer33你是什么意思的“每个字符”和“空格和所有”?顺便说一下,在C#4.0中,你可以写下:'var greps = Regex.Split(sender.ToString(),@“| \ s + grep \ s +”);' – 2011-04-07 20:11:52

+0

就像我的输入字符串是'cat file | grep“stuff”“',该列表包含23个项目,项目1是”c“,2是”a“,3是”t“等等。 – Hershizer33 2011-04-07 20:27:14

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 } 
相关问题