【问题标题】:Regex with Notepad++ to find a string pattern that excludes a substring [duplicate]使用 Notepad++ 的正则表达式查找排除子字符串的字符串模式 [重复]
【发布时间】:2020-10-07 23:16:50
【问题描述】:

我有一个包含 10 万行 html 的文档,其中填充了 <tr> ... </tr> 标签。在这些多行标签集的每一个内部的某个地方,都有一个带有“目的”一词的元素,即除了一个。我需要找到以<tr> 开头并且在结束</tr> 标记之前有一堆字符并且在该标记集中没有字符串“目的”的实例的页面长字符串。我正在使用带有正则表达式的 Notepad++ v7 搜索并匹配换行符。通过搜索<tr>(.*?)</tr> 可以轻松匹配 tr 字符串 这匹配一组且仅一组标签,其中包含所有文本。我不能做的是找到找到这个字符串的表达式,其中没有“目的”。我已经尝试过<tr>(?!.*?"purpose")(.*?)</tr>,它将在最后一个包含“目的”(是的,我需要包括引号)和许多变体的字符串之后找到第一个 tr 字符串,并阅读正则表达式否定前后的教程,但无济于事。我有很多类似的问题,这个文本缺少东西,所以如果有人知道如何做到这一点,请提前非常感谢!!!

【问题讨论】:

  • 试试<tr>((?!\bpurpose\b).)*?</tr>
  • 感谢尼克的回复。 @Somdudewillson 回答有效。我想“\b”字边界变化对我的其他一些任务很有用。

标签: html regex search notepad++


【解决方案1】:

这应该可以解决问题:

<tr>((?!"purpose").)*?</tr>

本质上,

  1. 找到开始标签,然后走到角色。
  2. 检查以确保它和连续字符不匹配“目的”(包括引号)
  3. 前移一个字符,如果没有到达结束标签,则返回2。
  4. 在结束标记处停止。

【讨论】:

  • 你是个天才。有用!但我不明白 .)* 的目的?确切的字符以及它为什么起作用。这 ”。”是任何字符,“*”是多个,我真的不明白“?”是什么。在这种情况下,作为一个实际问题。如果你去掉这三个中的一个,正则表达式引擎会尝试做什么?
  • 嗯,差不多。我修复了该 tr 行中缺少的“目的”部分,重新​​运行了表达式,但没有找到其他任何内容。伟大的。关于文档的下一个问题:某些 tr 行中缺少“语法”。我采用了相同的表达式,将单词语法替换为单词目的,没有其他更改,现在单击查找选择整个文档。该文档甚至没有以这些标签之一开始或结束,所以我不知道它为什么一直这样做。帮忙?
  • 更多信息:根据缺少的术语,有时它会根据需要找到标签字符串,有时它只是选择整个文档,即使很明显缺少术语(我可以数一个术语的出现次数,并且它小于 tr 标签集的数量。)想法?
  • “.”执行第 3 步,将正则表达式向前推进一个字符。 “*”重复步骤 2 和 3,“?”确保它存在于该循环之外,并在到达结束标记时继续执行第 4 步。
猜你喜欢
  • 1970-01-01
  • 2020-04-22
  • 1970-01-01
  • 2021-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多