1
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

4 回答 4

2

尝试使用这个正则表达式:

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

它将打印:

'Helloa a'
'main'
于 2013-06-25T18:31:42.797 回答
1

?在之后添加一个*以使*非贪婪

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

http://rubular.com/r/tso5Uvc88v


正则说明:

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

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

非贪心运算符将采用尽可能小的部分,这就是您想要的。

要使 a+或非*贪婪,只需在其后面加上 a ?

于 2013-06-25T18:30:40.680 回答
1

您可以使用惰性量词。替换**?我建议的 Sam,或使用此解决方案:

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

允许转义引号。

细节

(?>           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

有关原子团的更多信息,请点击此处

于 2013-06-25T18:34:35.997 回答
0

我认为您只想在引号和括号内捕获任何内容?尝试这个:\(\'(.+?)\'\)

于 2013-06-25T18:31:55.440 回答