用于从正则表达式的其余部分排除包含字符串的行的正则表达式

Regexp for excluding line containing string from rest of the regexp

我有一堆字符串,例如:

object field: TMemo
  Left = 6
  Top = 23
  Width = 390
  Height = 156
  Anchors = [akLeft, akTop, akRight, akBottom]
  ScrollBars = ssVertical
  TabOrder = 1
  OnChange = fieldChange
  OnKeyUp = fieldKeyUp
  AddMenu = True
  RightClickMoveCaret = True
  RightEdge = 0
end

object btn: TButton
  Left = 5
  Top = 3
  Width = 89
  Height = 21
  Caption = 'Button'
  TabOrder = 0
  TabStop = False
  OnClick = btnClick
end

我想要 select 除对象名称(在本例中为字段和 btn)以及以 [space][space] 开头的每一行之外的所有文本。

我可以 select 没有字段名称的所有内容都可以使用正则表达式,如下所示:

(object)|(: .*)|(end)|(  .*)

但我无法删除 select 以 "On" 开头的行。 你能帮我用这个正则表达式加入我的正则表达式,排除我想要的 selection 中的这些行吗?:

(^(?:(?!  On).)*$)

试试这个正则表达式(也许)

^(?!On.*$).*

您可以对最后一次交替使用否定前瞻 (?! On)( .*) 来检查右边的内容不是 2 个空格后跟 On:

(object)|(: .*)|(end)|(?!  On)(  .*)

Regex demo

由于您的匹配是在开始和结束时进行的,更精确的匹配可能是使用锚 ^$:

^(object)|(: .*)$|^(end)$|^(?!  On)(  .*)

Regex demo

请注意,您也可以在不使用捕获组的情况下获取匹配项:

^object|: .*$|^end$|^(?!  On)  .*