正则表达式解析行首
Posted
技术标签:
【中文标题】正则表达式解析行首【英文标题】:Regex Parsing Beginning of Line 【发布时间】:2014-07-25 08:25:16 【问题描述】:我有一个字符串,我想用正则表达式解析它。 ..
表示类别名称,:
之后的所有内容都是该类别的内容。
下面是我要解析的完整字符串:
..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
缺少第二行和第三行的内容。
如何修改我的模式以便获得正确的分组?
【问题讨论】:
【参考方案1】:.
匹配除换行符以外的所有内容(在大多数语言中,Ruby 是一个例外)。在 C# 中使用 RegexOptions.Singleline
(或在 PCRE 中使用 s
modifier)。
您需要让您的.*
延迟到下一个..
或字符串结尾$
,这样您就不会第一次匹配所有内容。此外,.
在字符类中没有任何特殊含义..因此您的表达式最终可能看起来像这样更干净:
[.]2[A-Z0-9]2,4:.*?(?=[.]2|$)
演示: Regex 和 C#
【讨论】:
谢谢!但是,这仍然不能解决第 3 组仅获得第一行的问题。我的目标是获得第 3 组的所有 3 行。另外,我正在使用 C#。 @sora0419 对不起!我的意思是Singleline
不是Multiline
..我不精通C#,我误读了文档。我添加了一个C# demo。
演示肯定帮了大忙!非常感谢!
请注意,这将包括尾随换行符(因为 \n
与 .
匹配,并且出现在前瞻中的 [.]2
之前)。您可以通过在前瞻中添加空格来解决此问题:(?=\s*[.]2|$)
。【参考方案2】:
我设法通过对[.]2
的负面预测来实现它:
[.]2[A-Z0-9]2,4:(.*\n?(?![.]2))*
【讨论】:
以上是关于正则表达式解析行首的主要内容,如果未能解决你的问题,请参考以下文章