C#正则表达式查找变量模式

时间:2014-08-23 13:21:34

标签: c# regex

我需要解析以下面代码示例的方式格式化的html。我的问题是字段名称可以包含在具有可变背景或颜色样式的标签中。我正在寻找的模式是
标签,忽略任何包裹文本后跟冒号的跨度(这是模式
身份:没有跨度标记包装)。匹配此模式应该为我提供密钥名称,密钥名称后面的任何内容都是密钥值,直到命中下一个密钥名称。下面是我需要解析的html示例。

string source = "
<br />id: Value here
        <br /><SPAN style=\"background-color: #A0FFFF; color: #000000\">community</SPAN>: Value here
        <br /><SPAN style=\"background-color: #A0FFFF; color: #000000\">content</SPAN><SPAN style=\"background-          color: #A0FFFF; color: #000000\">title</SPAN>: Value here
"
//split the source into key value pairs based on the pattern match.

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

以下是一些解析它的代码,假设您的示例HTML在`content'之后应该有另一个<br />元素。

string source = @"
  <br />id: Value here
  <br /><SPAN style=""background-color: #A0FFFF; color: #000000"">community</SPAN>: Value here
  <br /><SPAN style=""background-color: #A0FFFF; color: #000000"">content</SPAN>
  <br /><SPAN style=""background-color: #A0FFFF; color: #000000"">title</SPAN>: Value here";

var items = Regex.Matches(source,@"<br />(?:<SPAN[^>]*>)?([^<:]+)(?:</SPAN>)?:?\s?(.*)")
         .OfType<Match>()
         .ToDictionary (m => m.Groups[1].Value, m => m.Groups[2].Value)
         .ToList();