如何使用动态量词创建.NET Regex

时间:2010-10-06 07:35:25

标签: .net regex quantifiers

我试图以下列格式从数据流中提取JSON数据块:

    Some-Header-Name:Value
    Content-Length:Value
    Some-Other-Header:Value

    {JSON data string of variable length}

流包含上述模式的许多实例,每个实例中JSON数据的长度不同,如前面的Content-Length标题所示。

我希望创建一个匹配每个内容长度标头值的正则表达式,并使用它来匹配关联的内容块。我设想这样的事情......

    Content-Length:(?<LENGTH>\d+).*?\r\n\r\n(?<CONTENT>.{$<LENGTH>})

...但我不确定如何将CONTENT组的量词指定为动态值。

注意:虽然标题位于单独的行上,并且内容通过空行与标题分隔,但内容后面没有换行符,因此无法使用它来确定内容的结尾。

任何建议都将不胜感激。

谢谢, 添

1 个答案:

答案 0 :(得分:1)

正则表达式匹配字符串,而不是数字,因此它们不能接受字符串的一部分,将其转换为数字,并在同一个正则表达式中重新应用它。

你必须分几步完成:

  1. 匹配标题,提取长度值
  2. 构建一个新的正则表达式,如@"(?<HEADER>...)(?<CONTENT>.{" + length + "})"
  3. 重新应用该正则表达式并提取内容。