c#regex表达式找到MACRO(L" TextW")或MACRO(" TextA")

时间:2014-03-15 19:50:39

标签: c# regex

我试图对我的源代码(C ++)进行预处理,并且我试图找到与该模式匹配的字符串:

MACRO(L"TextW")

OR

MACRO("TestA")

但是我的正则表达式在使用时会返回不同的东西(与上面的例子相反):

MACRO(L"")

OR

MACRO("")

预处理正在c#中完成 正在使用的正则表达式是

Regex.Match(text,"MACRO\\(*(L?)(\"?)(.*?[^\\\\])(\"?)*\\)");

但是当处理宏的空形式时,正则表达式返回Grouping [3] =" \""和分组[4] =""而不是返回:分组[3] =""和分组[4] =" \""

提前致谢。

1 个答案:

答案 0 :(得分:1)

您可以使用负面反馈来处理这样的输入(MACRO(L"Text A\" "))。

此外,您使用?符号在正则表达式中几乎所有内容都是可选的。在这里,我只是让L是可选的。

试试这个:

string text = "MACRO(L\"TestA \\\"B\")";
Match match = Regex.Match(text, "MACRO\\(L?\"(.*?)(?<!\\\\)\"\\)");
if (match.Success)
{
    Console.WriteLine(match.Groups[0].Value);
    Console.WriteLine(match.Groups[1].Value);
}