【问题标题】: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 缺少第二行和第三行的内容。

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

【问题讨论】:

    标签: c# regex parsing regex-group


    【解决方案1】:

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


    您需要让您的.* 延迟到下一个.. 或字符串结尾$,这样您就不会第一次匹配所有内容。此外,. 在字符类中没有任何特殊含义..因此您的表达式最终可能看起来像这样更干净:

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

    演示: RegexC#

    【讨论】:

    • 谢谢!但是,这仍然不能解决第 3 组仅获得第一行的问题。我的目标是获得第 3 组的所有 3 行。另外,我正在使用 C#。
    • @sora0419 对不起!我的意思是Singleline 不是Multiline..我不精通C#,我误读了文档。我添加了一个C# demo
    • 演示肯定帮了大忙!非常感谢!
    • 请注意,这将包括尾随换行符(因为 \n. 匹配,并且出现在前瞻中的 [.]{2} 之前)。您可以通过在前瞻中添加空格来解决此问题:(?=\s*[.]{2}|$)
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2012-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-17
      • 1970-01-01
      相关资源
      最近更新 更多