簡體   English   中英

C#解析包含使用正則表達式的雙引號和單引號的字符串

[英]C# Parsing Strings that contain Double Quotes and Single Quotes using Regular Expression

我正在從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: @"""([^""""]*)(?:\.[^""""\\])*"""

我希望能夠剝離注釋,但是如果我查找單引號,那么單引號可能是我想保留的雙引號字符串,從而剝離了雙引號字符串的一半。

如果不清楚,請告訴我,我會盡力澄清。

有什么建議么?

我看到你用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(字符串行)”或類似的東西中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM