2013-05-10 73 views

回答

0

用下面的正则表达式,你会得到你想要的东西,没有任何分组

(?<=")[^"]+?(?=") 

代码来获取引用的文字:

string txt = "hi my name is \"foo\""; 
string quotedTxt = Regex.Match(txt, @"(?<="")[^""]+?(?="")").Value; 
+0

它有帮助,但是,我也得到了引号后的文字“”......也许你可以改变它......感谢例子:“它是一切都好”这也是即将....输出:-it这一切都是好的,这也来..感谢 – 2013-05-10 16:49:58

+0

@bhargava这是奇数,我没有得到这个 – 2013-05-10 17:39:28

+0

问题是,前瞻并不消耗结束报价。正则表达式开始在第一场比赛结束的地点寻找第二场比赛,并且几乎立即找到第二场比赛,因为后场比赛与先前匹配的报价相匹配。 – 2013-05-10 20:37:51

3

这里是你的问题的完整解决方案:

string sample = "this is \"what I need\""; 
Regex reg = new Regex(@"""(.+)"""); 
Match mat = reg.Match(sample); 

string foundValue = ""; 
if(mat.Groups.Count > 1){ 
    foundValue = mat.Groups[1].Value; 
} 
Console.WriteLine(foundValue); 

打印:

我需要什么

+1

这是正确的答案,但你能解释它为什么有效吗?(他们只想打印组,而不是整个匹配)? – 2013-05-10 16:34:01

+0

最初的正则表达式工作得很好,而不必诉诸于'。*'(或在这种情况下'。+')。但是+1指出需要的是'Groups [1]'而不是'Groups [0]'。我怀疑这是OP项目的问题。 – 2013-05-10 16:38:21

0

Too迟到发布答案?

string text = "some text \"I need this\" \"and also this\" but not this"; 

List<string> matches = Regex.Matches(text, @"""(.+?)""").Cast<Match>() 
         .Select(m => m.Groups[1].Value) 
         .ToList(); 
相关问题