C#使用正则表达式解析包含双引号和单引号的字符串

时间:2015-08-25 11:42:23

标签: c# regex string

我正在从Visual Basic 6源文件中解析多个双引号文字文本。某些行可能在每个语句的末尾都有注释。每条评论都以单引号开头。此外,文字文本可能有单引号,我需要保留。下面的行是最后带注释的语句示例。

示例行:MsgBox“在执行医疗数据字典搜索之前必须输入至少2个'字符'。”,vbInformation,“搜索硬盘”这是“评论”。

以下正则表达式将返回:

Must enter at least 2 'characters' before doing a Healthcare Data Dictionary Search.
Search HDD
comment

以下正则表达式将捕获/解析多个双引号字符串文字,但是它不会忽略单引号后面的双引号字符串(在注释中)。

Regular Expression: "([^""]*)(?:\.[^""\\])*"
C#-Style: @"""([^""""]*)(?:\.[^""""\\])*"""

我希望能够删除评论,但是如果我查找单引号,那么单引号可能会出现在我想保留的双引号字符串中,从而剥离了双引号字符串的一半。

如果不清楚,请告诉我,我会尽力澄清。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我看到你用c#标记了这个。为什么不使用c#和LINQ呢!下面的内容会对你有用吗?

   var text = "MsgBox \"Must enter at least 2 'characters' before doing a Healthcare Data Dictionary Search.\", vbInformation, \"Search HDD\" 'This is a \"comment\".";

   //Use LINQ to count singlequotes
   var singleQuoteOccurences = text.Count(sq => sq == '\'');

   //If you have an odd number, that means a comment is at the end
   //so just strip off everything after that last quote
   if(singleQuoteOccurences % 2 == 1)
        text = text.Substring(0, text.LastIndexOf('\''));

<强>收率:

MsgBox&#34;必须输入至少2个字符&#39;在进行医疗保健数据字典搜索之前。&#34;,vbInformation,&#34;搜索硬盘&#34;

这可以很容易地封装到&#34; StringVBTrailingComment(字符串行)&#34;或类似的东西。