正则表达式解析线的起点

时间:2014-06-04 15:31:12

标签: c# regex parsing regex-group

我有一个字符串,我想用正则表达式解析它。 ..表示类别名称,:之后的所有内容都是该类别的内容。

下面是我要解析的完整字符串:

..NAME: JOHN
..BDAY: 1/1/2010
..NOTE: 1. some note 1
 2. some note 2
 3. some note 3
..DATE: 6/3/2014

我正在尝试解析它以便

(group 1) 
..NAME: JOHN

(group 2)
..BDAY: 1/1/2010

(group 3)
..NOTE: 1. some note 1
 2. some note 2
 3. some note 3

(group 4)
..DATE: 6/3/2014  //a.k.a update date

我使用的正则表达式模式是

\.\.[A-Z0-9]{2,4}:.*

使(group 3) ..NOTE: 1. some note 1错过了第二行和第三行的内容。

如何修改我的模式以便我能获得正确的分组?

2 个答案:

答案 0 :(得分:1)

.匹配除换行之外的所有内容(在大多数语言中,Ruby是一个例外)。在C#中使用RegexOptions.Singleline(或PCRE中的s modifier)。


您需要让.*懒惰到下一个..或字符串$的结尾,这样您就不会在第一时间匹配所有内容。此外,.在字符类中没有任何特殊含义。所以你的表达式最终可能看起来更清晰:

[.]{2}[A-Z0-9]{2,4}:.*?(?=[.]{2}|$)

演示: RegexC#

答案 1 :(得分:1)

我设法用[.]{2}的负面预测来实现它:

[.]{2}[A-Z0-9]{2,4}:(.*\n?(?![.]{2}))*