正则表达式检查上一行

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”。

【讨论】:

以上是关于正则表达式检查上一行的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式基础知识

检查文件中是不是存在所有多个字符串或正则表达式

惊爆!一行正则表达式引发的 CPU 惨案

Pyspark:UDF 将正则表达式应用于数据帧中的每一行

Pandas:在 500 万行上使用 Apply 和正则表达式字符串匹配

检查字符串是不是以正则表达式数字开头