RegEx从最后一次出现的字符串开始

如何解决RegEx从最后一次出现的字符串开始

我有一个文本文件,其中有一个数据集,我想从中删除一些记录。看起来像这样:

  1. = separator =
  2. 数据
  3. 不需要的关键字
  4. 数据
  5. = separator =
  6. 数据
  7. wantedKeyword
  8. 数据
  9. = separator =
  10. 数据
  11. 不需要的关键字
  12. 数据
  13. = separator =
  14. 数据
  15. wantedKeyword
  16. 数据
  17. = separator =

我可以使用某个关键字来标识不需要(或不需要)的记录。我想使用RegEx,并利用此关键字和分隔符字符串删除所有这些表达式。 删除记录的“底部”部分效果很好,但是当我尝试使用以下方法删除“顶部”部分时:

= separator =。*?unwantedKeyword

匹配的开始是第一个可用的= separator =(第5行),而不是end关键字(第11行)之前的最后一个(第9行)。

导致想要的记录被删除

是否可以仅匹配该字符串的最后一个实例(模拟数据中的= separator =),所以仅匹配第1.至3.和9.至10行,而不是1.至3.和5.至11行会被替换?

编辑:

或者我想只是使其反向读取文件? Notepad ++禁用了RegEx的该选项,因此不确定是否可行。

解决方法

如果您要删除第1至3行以及第9至11行,则可以使用前瞻性来防止匹配以=separator=开头或包含不想要的关键字的所有行。

^=separator=.*(?:\R(?!(?:=separator=|.*?\bunwantedKeyword\b)).*)*\R.*?\bunwantedKeyword\b.*\R*

Regex demo

enter image description here

,

我会用

(?s)=separator=(?:(?!=separator=).)*?unwantedKeyword

请参见proof

说明

--------------------------------------------------------------------------------
  (?s)                     set flags for this block (with . matching \n) 
--------------------------------------------------------------------------------
  =separator=              '=separator='
--------------------------------------------------------------------------------
  (?:                      group,but do not capture (0 or more times
                           (matching the least amount possible)):
--------------------------------------------------------------------------------
    (?!                      look ahead to see if there is not:
--------------------------------------------------------------------------------
      =separator=              '=separator='
--------------------------------------------------------------------------------
    )                        end of look-ahead
--------------------------------------------------------------------------------
    .                        any character
--------------------------------------------------------------------------------
  )*?                      end of grouping
--------------------------------------------------------------------------------
  unwantedKeyword          'unwantedKeyword'

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?