在Notepad++中如何否定正则表达式

3

我知道,这似乎是又一个重复的问题,但我却做不到。

我的模式:\d\s"很好用,但当我试图添加否定条件以查找不包含以上正则表达式的行时,n++就无法找到任何内容。我尝试了(?!:\d\s"),采用了不同的通配符变体,但都没有成功。

样本数据:

blah_blah:0 "More blah..."

blah_blah:0 More blah..."

(行首有空格,行末有\n)。

例如,我想要捕获缺少引号的情况(请参见第二行)。

更新: 我需要反转我的正则表达式以查找格式不正确的行。


1
提供你想匹配的样本数据以及不应该匹配的样本数据会很有帮助。 - Ken White
我知道 :\d\s\w 可以工作,但了解其他方法也是好的。 - Al Crow
包含以下行:““我正在尝试添加否定以查找不包含上述正则表达式的行””。 - Mohammad Yusuf
2
Mark选项卡中使用您的正则表达式(只需勾选Bookmark line选项),并在单击Mark All后,单击Search-> Boomark-> Inverse Bookmark - Wiktor Stribiżew
如果对您不起作用,请详细说明您正在做什么。 - Wiktor Stribiżew
@WiktorStribiżew 谢谢,它起作用了。不过我还在寻找具有相同功能的正则表达式。 - Al Crow
2个回答

5

标签行选项中勾选后,使用您的:\d\s"正则表达式在Mark选项卡中,并在单击全部标记后,单击搜索 -> 书签 -> 反向书签

如果您想通过正则表达式解决此任务,则需要使用

^(?!.*:\d\s").+

这个正则表达式将突出显示任何非空行,该行没有匹配 :\d\s" 模式。
细节:
  • ^ - 行的开头
  • (?!.*:\d\s") - 在除换行符以外的任意0+字符后面没有:、数字、空格和"
  • .+ - 除换行符以外的任意1个或多个字符

enter image description here


很好,我不知道像Notepad++这样的某些文本编辑器中^可以匹配新行的开头。然而,它通常是字符串的开头。 - ssc-hrep3
@ssc-hrep3:是的,实际上,在NPP中,锚点和单词边界的工作方式非常奇特。只是为了好玩,可以在任何文档上尝试\A\w --> \($&\)并使用全部替换功能。 - Wiktor Stribiżew
我没有提到任何应启用的选项。因此,默认情况下必须禁用*.匹配换行符*。 - Wiktor Stribiżew
谢谢@WiktorStribiżew,它确实有效,但是未选中复选框,与ssc-hrep的答案相同。 - Al Crow
1
我添加了设置的截图。 - Wiktor Stribiżew

1
您可以使用这个正则表达式:
(?:^|\r?\n)(?!.*?:\d\s.*?).*?(?=\r?\n|$)

它将匹配行结束(或文档的开头/结尾)之间不包含:\d\s的所有内容。

  • (?:^|\r?\n)匹配文档开头或行开头(允许UNIX和Windows行结束符)在非匹配组(?:)中。
  • (?!.*?:\d\s.*?).*?匹配除.*?\:\d\s.*?之外的所有内容。
  • (?=\r?\n|$)标记了一个正向前瞻,用于行结束符\r\n或文档结束符$。正向前瞻是必要的,因为行结束符已经被正则表达式的第一部分匹配到了。如果这部分也匹配,它实际上会跳过每个第二行(在正则表达式中不可能重叠匹配)。

以下是JavaScript示例:

var regex = /(?:^|\r?\n)(?!.*?:\d\s.*?).*?(?=\r?\n|$)/g;
var text = document.getElementById("main").innerHTML; // read the line of the HTML snippet (easier to write lines in HTML);
var match = text.match(regex);
console.log(match);
<div id="main">
  line:1 abc123abc123
  line: abc123abc123
  line:3 abc123abc123
  line:4abc123abc123
  line:5 abc123abc123
  line6 abc123abc123
  lineabc123abc123
</div>


不幸的是,这在N++中无效。它只找到一个实例,而且甚至不是所需的 o_0 只是最后一行。 - Al Crow
@AlCrow 在Notepad++中对我有效,只需将我的示例行复制到新文件中,搜索完整的正则表达式 (?:^|\r?\n)(?!.*?:\d\s.*?).*?(?=\r?\n|$),它会匹配4行。不过我必须禁用复选框(.找到\r\n)。 - ssc-hrep3
谢谢,它可以在未选中框的情况下工作。但是只能标记一个解决方案,抱歉。 - Al Crow

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接