【问题标题】:Problem with regular expression using look behind feature使用后视功能的正则表达式问题
【发布时间】:2020-01-24 14:45:29
【问题描述】:

我尝试构建简单的正则表达式来删除某些不良(不需要的)代码部分和需要使用的查找功能。

在我添加\s+ 以从标记中排除空格之前,它一直有效。

消除部分表达式我终于到了(?<=\s+)foo,它仍然被警告为无效表达式。

它可能看起来有点奇怪或不清楚,所以扩展它: (?<=foo\s+)bar 被警告为无效表达式,其中 (?<=foo)\s+bar 正在工作,但它在 bar 之前标记空格。

我在notepad++中使用它。

【问题讨论】:

  • 来自 Regex101 :“lookbehind 中的量词使其宽度不固定”
  • 我认为不支持在后视中使用量词。你可以改用\bfoo\s+\Kbar
  • 可变长度lookbehinds仅在某些正则表达式中可用,例如.net
  • 我认为您不需要回顾。如果您要删除内容,请使用捕获组来标记您要保留的内容,并将其余内容排除在外。这基本上会删除其余部分。
  • 您可以使用单词边界来强制单词的实际开头:\bfoo 会确保 foo 前面是非单词字符。

标签: regex expression notepad++


【解决方案1】:

来自@Toto 的评论,Notepad++ 不支持variable length lookbehind。它使用boost 正则表达式。

Notepad++ 确实支持\K 重置报告匹配的起点。

\bfoo\s+\Kbar\b

Regex demo

另一种方法是在捕获组中捕获 bar。

\bfoo\s+(bar)\b

Regex demo


注意 \s 也匹配换行符,也许您也可以使用 \h+ 匹配 1+ 个水平空白字符。

【讨论】:

  • 我无法用 \b \K 构建它 - 不知何故无法工作,所以我只是从后面拉出 \s+ 。但是现在有一个更大的问题,因为notepad++停止用替换按钮替换搜索短语中的任何内容。替换所有作品,一步一步替换不行。替换按钮现在可以像下一个搜索一样工作。甚至我以前的结构现在也不起作用。我发现了这样的东西:stackoverflow.com/questions/34095915/… 但没有解决办法。我重新打开了记事本++或文件,没有修复。
  • 如果单词 foo 或 bar 是较大单词的一部分,您可以省略单词边界 foo\s+\Kbar
猜你喜欢
  • 1970-01-01
  • 2021-02-03
  • 1970-01-01
  • 1970-01-01
  • 2020-10-29
  • 1970-01-01
  • 2016-05-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多