【问题标题】:Regex check previous line正则表达式检查上一行
【发布时间】:2010-12-16 06:11:10
【问题描述】:

使用正则表达式(在 c#.net 中)是否可以检查字符串的前一行?

例如,我需要选择上一行不是一系列星号的字符串(上一行:******

【问题讨论】:

  • 如果一行中有两行只包含星号怎么办?您要选择第一个吗?

标签: c# .net regex


【解决方案1】:
(?m)^(?<!^\*+\r?\n).+

(?m) 开启多行模式,因此^ 可以匹配一行的开头。后视检查前一行;如果成功(也就是说,它没有看到一行星号),.+ 会使用当前行。

【讨论】:

  • 旧 Mac 只使用 \r 换行。也许\n 应该是可选的?
  • 它们不能都是可选的;要完全匹配三种分隔符中的任何一种,您需要\r?\n|\r 之类的东西。我想我们应该继续这样做,但即使在他们做出转换之前,我也几乎没有在野外看到过 \r
  • 哦,我没有仔细看你的正则表达式。如果他们关注$,它们都可以是可选的。所以是这样的:$\r?\n?。但你是对的,这是一个非常晦涩的案例。
【解决方案2】:

您可以使用RegexOptions.MultiLine,然后匹配如下内容:

(?<!^\*+$\r?\n?.*)foo

仅当前一行不包含星号时才匹配“foo”。

【讨论】:

    猜你喜欢
    • 2012-08-20
    • 2012-04-10
    • 2015-03-12
    • 2011-12-19
    • 1970-01-01
    • 2022-06-16
    • 1970-01-01
    • 1970-01-01
    • 2012-12-12
    相关资源
    最近更新 更多