C#使用正则表达式解析包含双引号和单引号的字符串
我正在解析来自Visual Basic 6源文件的多个双引号文本。有些行在每条语句的末尾可能有注释。每个注释前面都有一个引号。此外,文字文本可能有我需要保留的单引号。下一行是一个结尾带有注释的语句示例 示例行:MsgBox“在执行医疗数据字典搜索之前必须输入至少2个‘字符’”,vbInformation,“Search HDD”这是一条“注释” 以下正则表达式将返回: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
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('\''));