嘿所有,我知道有很多问题可以与Regex匹配引号,但是我尝试的少数几个还没有让我走远......我认为它只是一个新的Regex案例
基本上我正在解析一个unix grep命令字符串,需要提取所有grep'ed的东西。一个例子:
cat theLogFile | grep "some stuff" | grep moreStuffWithRandomChars*&^^#&@_+ | grep "stuff" | grep thing2
我希望结果如下:
"some stuff"
moreStuffWithRandomChars*&^^#&@_+
"stuff"
thing2
全部谢谢!
答案 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 }