C#Regex匹配多个部分

时间:2016-03-11 03:55:40

标签: c# regex

我有一个这种格式的.txt文件

  

内容长度:20

     

blahblahblah
   -stop-
  内容长度:10

     

烧伤
   -step-
  内容长度:0

     

< ---空的空间--->
   -step-
  内容长度:10

     

HUBA
   -step-

我使用正则表达式来分隔每个内容长度的部分,这是使用步骤或停止使其成为部分的结尾。我的正则表达式是

  

((内容长度:?)\ S(\ d )\ r \ n] +([\ s \ S] +)( - 停止 - | -step-)) *

但是,如果内容长度为零,这意味着在步骤或停止之前有空格,它还会捕获下一个内容长度部分。有什么想法可以防止这种情况吗?

5 个答案:

答案 0 :(得分:1)

我想出了以下正则表达式,不确定它是否是你想要的:

var pattern = @"(content-length:\s\d+(?:[\s\S]*?)?-(?:stop|step)-)";
var input = @"content-length: 20

    blahblahblah
    -stop-
    content-length: 10

    bum
    -step-
    content-length: 0


    -step-
    content-length: 10

    huba
    -step-";
var result = Regex.Split(input, pattern);

输出:

enter image description here

答案 1 :(得分:0)

试试这个

(?:(?:content-length):\s(?<length>\d+)\n+(?<content>.*?)\n*(?:-stop-|-step-))

Demo

输入:

content-length: 20

blahblahblah
-stop-
content-length: 10

bum
-step-
content-length: 0


-step-
content-length: 10

huba
-step-      

输出:

MATCH 1
length  [16-18] `20`
content [20-32] `blahblahblah`
MATCH 2
length  [56-58] `10`
content [60-63] `bum`
MATCH 3
length  [87-88] `0`
2.  [91-91] ``
MATCH 4
length  [114-116]   `10`
content [118-122]   `huba`

答案 2 :(得分:0)

try this

(?:(?:content-length:))\s(\d+)[\r\n]+(.*)?[\r\n]+(?:-stop-|-step-)

答案 3 :(得分:0)

((内容长度:)\ S(\ d +)[\ r \ n]的+(*)\ N *( - 停止 - | -step-))。 在这里查看正则表达式https://regex101.com/r/wU9uA4/1

答案 4 :(得分:0)

试试这段代码:

((content-length:)\s(\d)[\r\n]\*([\s\S]\*?)(-stop-|-step-))