正则表达式C#如何

时间:2013-06-25 18:27:31

标签: c# regex

static void Main(string[] args)
        {
            int count = 0;
            String s = "writeln('Helloa a') tung ('main')";
            String patern = @"\'+[\S+\s]*\'";
            Regex myRegex = new Regex(patern);
            foreach (Match regex in myRegex.Matches(s)) {
                Console.WriteLine(regex.Value.ToString());
            }

        }

运行时,显示

'Helloa a') tung ('main'

我不想这个

我想打印

'Helloa a'
'main'

你能帮助我吗?

4 个答案:

答案 0 :(得分:2)

尝试使用此正则表达式:

@"\'[^']+\'"

它将打印:

'Helloa a'
'main'

答案 1 :(得分:1)

?之后添加*以使*非贪婪

@"\'+[\S+\s]*?\'"

http://rubular.com/r/tso5Uvc88v


<强> REGEXPLANATION:

贪心正则表达式运算符将采用它可以使用的最大可能字符串(在2个单引号之间,在您的情况下是粗体部分。

  

writeln(' Helloa a')tung('main ')

非贪婪的操作员将采用最小的部分,这就是你想要的。

要使+*非贪婪,只需在其后加?

答案 2 :(得分:1)

您可以使用延迟量词。正如我所建议的那样,将*替换为*?,或使用此解决方案:

@"\'(?>[^']+|(?<=\\)')*\'"

允许转义引号。

详细

(?>           open an atomic group
    [^']+     all that is not a quote one or more times
   |          OR
    (?<=\\)'  a quote preceded by a backslash
)             close the atomic group
*             repeat the group zero or more times

有关原子组here的更多信息。

答案 3 :(得分:0)

我认为你只想捕捉引号和括号内的任何内容?试试这个:\(\'(.+?)\'\)