C# 将带引号和不带引号的字符串与正则表达式匹配
嘿,大家好,我知道有很多问题需要与正则表达式匹配,但我尝试的几个问题还没有让我走得更远。。。我想这只是一个新加入Regex的例子 基本上,我正在解析一个unix grep命令字符串,需要提取所有grep的内容。例如:C# 将带引号和不带引号的字符串与正则表达式匹配,c#,regex,.net-4.0,C#,Regex,.net 4.0,嘿,大家好,我知道有很多问题需要与正则表达式匹配,但我尝试的几个问题还没有让我走得更远。。。我想这只是一个新加入Regex的例子 基本上,我正在解析一个unix grep命令字符串,需要提取所有grep的内容。例如: cat theLogFile | grep "some stuff" | grep moreStuffWithRandomChars*&^^#&@_+ | grep "stuff" | grep thing2 我希望结果是: "some stuff" moreSt
cat theLogFile | grep "some stuff" | grep moreStuffWithRandomChars*&^^#&@_+ | grep "stuff" | grep thing2
我希望结果是:
"some stuff"
moreStuffWithRandomChars*&^^#&@_+
"stuff"
thing2
谢谢大家 我不知道这是否满足了您的所有需求,但这里有一个指针:您可以像这样拆分字符串:
Regex.Split(string, "| grep ")
然后扔掉第一部分。我不知道这是否满足了您的所有需求,但这里有一个指针:您可以像这样拆分字符串:
Regex.Split(string, "| grep ")
然后扔掉第一部分。此模式返回以下结果作为第一组 字符串regexpatern=@“grep(.*)(\| |$)” “一些东西” 更多随机字符*&^^#&@_+ “东西” 事情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
}
此模式将以下结果作为第一组返回 字符串regexpatern=@“grep(.*)(\| |$)” “一些东西” 更多随机字符*&^^#&@_+ “东西” 事情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
}
你需要使用正则表达式吗?为什么不这样做呢
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 }
你需要使用正则表达式吗?为什么不这样做呢
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 }
也许我做错了什么,但这是:List greps=newlist(Regex.Split(sender.ToString(),“| \\s+grep\\s+”);生成的grep包含输入字符串的每个字符、空格和all@Hershizer33“每个字符”和“空格和所有字符”是什么意思?顺便说一下,在C#4.0中,您可以只编写:
var greps=Regex.Split(sender.ToString(),@“|\s+grep\s+”代码>就像我的输入字符串是“cat file | grep”stuff”
,列表包含23个项目,项目1是“c”,2是“a”,3是“t”等等。也许我做错了什么,但这是:list greps=new list(Regex.Split(sender.ToString(),“|\\s+grep\\s+”);生成的grep包含输入字符串的每个字符、空格和all@Hershizer33“每个字符”和“空格和所有字符”是什么意思?顺便说一下,在C#4.0中,您可以只编写:var greps=Regex.Split(sender.ToString(),@“|\s+grep\s+”代码>就像我的输入字符串是“cat file | grep”stuff”“
,列表包含23个项目,项目1是“c”,2是“a”,3是“t”等等。谢谢大家的建议!谢谢大家的建议!非常感谢您的回答,但是如果您有时间,您是否介意解释一下Regex语句的含义?我想说的是,我不需要问那么多正则表达式问题,哈哈。(仅仅是正则表达式模式,我可以与火柴和其他东西混在一起)@Hershizer33这里有一张解释正则表达式的图片,非常感谢你的回答,但是如果你有时间,你介意解释一下正则表达式语句的读法吗?我想说的是,我不需要问那么多正则表达式问题,哈哈。(只是正则表达式的模式,我可以和火柴之类的东西混在一起)@Hershizer33这里有一张解释正则表达式的图片