正则表达式检查上一行
Posted
技术标签:
【中文标题】正则表达式检查上一行【英文标题】:Regex check previous line 【发布时间】:2010-12-16 06:11:10 【问题描述】:使用正则表达式(在 c#.net 中)是否可以检查字符串的前一行?
例如,我需要选择上一行不是一系列星号的字符串(上一行:******
)
【问题讨论】:
如果一行中有两行只包含星号怎么办?您要选择第一个吗? 【参考方案1】:(?m)^(?<!^\*+\r?\n).+
(?m)
开启多行模式,因此^
可以匹配一行的开头。后视检查前一行;如果成功(也就是说,它没有看到一行星号),.+
会使用当前行。
【讨论】:
旧 Mac 只使用\r
换行。也许\n
应该是可选的?
它们不能都是可选的;要完全匹配三种分隔符中的任何一种,您需要\r?\n|\r
之类的东西。我想我们应该继续这样做,但即使在他们做出转换之前,我也几乎没有在野外看到过 \r
。
哦,我没有仔细看你的正则表达式。如果他们关注$
,它们都可以是可选的。所以是这样的:$\r?\n?
。但你是对的,这是一个非常晦涩的案例。【参考方案2】:
您可以使用RegexOptions.MultiLine,然后匹配如下内容:
(?<!^\*+$\r?\n?.*)foo
仅当前一行不包含星号时才匹配“foo”。
【讨论】:
以上是关于正则表达式检查上一行的主要内容,如果未能解决你的问题,请参考以下文章