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

时间:2019-03-02 11:05:57

标签: regex operators

我有一堆字符串,例如:

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

我想选择除对象名称(在此情况下为字段和btn)之外的所有文本以及以[space] [space] On开头的每一行。

我可以使用regexp选择所有没有字段名称的内容:

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

但是我无法取消选择以“开”开头的行。 您可以帮助我将我的正则表达式与此正则表达式一起加入,但我希望从选择中删除这些行吗?:

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

2 个答案:

答案 0 :(得分:1)

您可以在最后一个替代项中使用负前行(?! On)( .*)来检查右边的不是2个空格,然后是On:

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

Regex demo

由于比赛是在比赛的开始和结束,因此更精确的比赛可能是使用锚点^$

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

Regex demo

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

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

答案 1 :(得分:0)

尝试此正则表达式(也许)

^(?!On.*$).*