Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#使用正则表达式解析包含双引号和单引号的字符串_C#_Regex_String - Fatal编程技术网

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

C#使用正则表达式解析包含双引号和单引号的字符串,c#,regex,string,C#,Regex,String,我正在解析来自Visual Basic 6源文件的多个双引号文本。有些行在每条语句的末尾可能有注释。每个注释前面都有一个引号。此外,文字文本可能有我需要保留的单引号。下一行是一个结尾带有注释的语句示例 示例行:MsgBox“在执行医疗数据字典搜索之前必须输入至少2个‘字符’”,vbInformation,“Search HDD”这是一条“注释” 以下正则表达式将返回: Must enter at least 2 'characters' before doing a Healthcare Dat

我正在解析来自Visual Basic 6源文件的多个双引号文本。有些行在每条语句的末尾可能有注释。每个注释前面都有一个引号。此外,文字文本可能有我需要保留的单引号。下一行是一个结尾带有注释的语句示例

示例行:MsgBox“在执行医疗数据字典搜索之前必须输入至少2个‘字符’”,vbInformation,“Search HDD”这是一条“注释”

以下正则表达式将返回:

Must enter at least 2 'characters' before doing a Healthcare Data Dictionary Search.
Search HDD
comment
下面的正则表达式将捕获/解析多个双引号字符串文本,但是它不会忽略单引号(在注释中)后面的双引号字符串

我希望能够去掉评论,但是如果我寻找一个单引号,该单引号可能位于我想要保留的双引号字符串中,从而去掉一半双引号字符串

请让我知道,如果这是不清楚,我会试图澄清


有什么建议吗?

我看到你用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“在进行医疗数据字典搜索之前必须输入至少2个‘字符’”,vbInformation,“搜索硬盘”


这是可以轻松封装到“StringVBTrailingComment(string line)”或类似内容中的内容。

如果对整个源文件执行此操作,则不太可能找到适用于所有情况的正则表达式-最好编写解析器。它可能会(也可能不会)稍微慢一点,但您可能只需要运行几次,速度也不会有多大影响。正则表达式只有在具有可预测且一致的模式时才能很好地工作。我正在编写一个解析器。这只是一件,如果它是。我一直在尝试使用非正则表达式的解决方案来缩小字符串的范围,以便使用上面的解决方案。不过我运气不太好。我希望我能在这里找到一些对我有帮助的东西。为了澄清,我正在寻找一个正则表达式来逐行处理,而不是整个文件。所以示例行就是您试图解决的一行,对吗?@tsacodes是的,没错。非常酷!谢谢你的建议。我试试看。我倾向于远离Linq,因为没有多少人知道我在哪里。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('\''));