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'
你能帮助我吗?
答案 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)
我认为你只想捕捉引号和括号内的任何内容?试试这个:\(\'(.+?)\'\)