我有一个字符串,我想用正则表达式解析它。 ..
表示类别名称,:
之后的所有内容都是该类别的内容。
下面是我要解析的完整字符串:
..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
错过了第二行和第三行的内容。
如何修改我的模式以便我能获得正确的分组?
答案 0 :(得分:1)
.
匹配除换行之外的所有内容(在大多数语言中,Ruby是一个例外)。在C#中使用RegexOptions.Singleline
(或PCRE中的s
modifier)。
您需要让.*
懒惰到下一个..
或字符串$
的结尾,这样您就不会在第一时间匹配所有内容。此外,.
在字符类中没有任何特殊含义。所以你的表达式最终可能看起来更清晰:
[.]{2}[A-Z0-9]{2,4}:.*?(?=[.]{2}|$)
答案 1 :(得分:1)
我设法用[.]{2}
的负面预测来实现它:
[.]{2}[A-Z0-9]{2,4}:(.*\n?(?![.]{2}))*