在 C# 中解析嵌套的 CSS 样式文本

本文关键字:CSS 样式 文本 嵌套 | 更新日期: 2023-09-27 17:56:33

我希望在 C# 中将文本作为字符串输入,如标题BEFORE_PROCESSING所示。此文本的格式需要符合以下条件:

    没有任何样式标签
  1. 的裸句子(例如句子 1)必须获得样式标签才能使整个句子变得体。
  2. 需要识别已经具有样式标记的句子,并且它们的前景色元素必须设置为"fg:Red",以使整个句子看起来为 RED。
  3. 已具有样式标记的句子可能具有嵌套样式标记。因此,这需要考虑在内。

例如,格式设置完成后,标题BEFORE_PROCESSING句子应类似于AFTER_PROCESSING下的文本。

我的问题是,在 C# 中实现此文本处理业务的最有效方法是什么?是使用正则表达式还是矫枉过正?你认为可能存在更好的选择吗?谢谢。

(我正在使用 C#4)

BEFORE_PROCESSING

"Sentence 1 <style styles='B;fg:Green'>STYLED SENTENCE</style> Sentence 2"

AFTER_PROCESSING

"<style styles='B'>Sentence 1 </style> 
 <style styles='B;fg:Red'>STYLED  SENTENCE</style>  
 <style styles='B'>Sentence 2</style>"

在 C# 中解析嵌套的 CSS 样式文本

您可以尝试以下基于正则表达式的解决方案:

string myLine = "Sentence 1<style styles='B;fg:Green'>STYLED SENTENCE</style>Sentence 2";
const string splitLinesRegex = @"((?<Styled>'<style[^'>]*'>[^'<'>]*'</style'>)|(?<NoStyle>[^'<'>]*))";
var splitLinesMatch = Regex.Matches(myLine, splitLinesRegex, RegexOptions.Compiled);
List<string> styledLinesBis = new List<string>();
foreach (Match item in splitLinesMatch)
{
    if (item.Length > 0)
    {
        if (!string.IsNullOrEmpty(item.Groups["Styled"].Value))
            styledLinesBis.Add(string.Format("<style styles='B'>{0}</style> ", item.Groups["Styled"].Value));
        if (!string.IsNullOrEmpty(item.Groups["NoStyle"].Value))
            styledLinesBis.Add(string.Format("<style styles='B;fg:Red'>{0}</style>  ", item.Groups["NoStyle"].Value));
    }
}

您只需要使用字符串连接字符串即可。例如,联接语句。