正则表达式匹配带负向后引用(.NET)的引用字符串

|| 我正在尝试创建一个.NET正则表达式,以匹配VB.NET源代码中带引号的字符串,但不包括某些不需要的字符串,例如XML注释和区域标签中的字符串等。 这是一个数据样本,代表Regex可能针对其执行的一些VB.NET源代码:
#Region \"Class Constructors\"

\'\'\' <summary>
\'\'\' Initializes a new instance of the <see cref=\"MyClass\" /> class.
\'\'\' </summary>
Public Sub New()
    Debug.WriteLine(\"This string should be matched by the Regex\")
End Sub

#End Region
正则表达式应与
Debug.WriteLine
方法调用中带引号的字符串匹配,但应忽略区域标签和XML注释中的字符串。它还应支持VB.NET的引号转义语法,该语法使用两个连续的双引号表示嵌入式(转义)引号字符:
\"This is a string containing an escaped quote \"\" character\"
首先,我尝试了以下正则表达式,但是后面的负数使它与后续的收盘报价相匹配,就好像它们是开盘报价一样。
(?<!Region\\s+)\"(?<Literal>(?:[^\"]|\"\")*)\"
另外,如果Regex可以完全忽略由一对引号字符表示的空字符串,则将很有帮助。 有什么建议吗? 提前致谢, 提姆     
已邀请:
我认为这是单个正则表达式无法解决您所有问题的情况之一。我假设#Region指令可以像下面这样多行:
#Region \\
  \"MyRegion\"
或与其他换行符一起使用,因此您的后面看起来根本不够。从具有复杂语法的文本中有选择地提取匹配项需要一个词法分析器,或者您可能应该以不同的方式解析整个内容。 但是,您可能可以找到一个快捷方式,例如,您知道在标签之间不需要任何内容​​,因此您可以循环浏览每行并跳过之后的所有内容,直到找到找到结束标记,然后您就可以继续匹配字符串。 您应该特别注意编写正则表达式以删除注释和预处理程序指令(即:\',#和REM)。请注意,这些关键字不在字符串中时都有效,因此剥离注释会有些麻烦。即使在那里,一个正则表达式可能还是不够的。 对于删除双引号,这似乎对我有用:
\"((?:[^\"]|\"\")+)\"
    

要回复问题请先登录注册