【问题标题】:Regex OR in notepad++记事本++中的正则表达式或
【发布时间】:2023-03-05 12:31:01
【问题描述】:

我想在记事本++中查找以下所有实例

action421
action732
action983

但忽略所有其他actionXXX 组合。

我正在寻找类似于action(421)|(732)|(983) 的正则表达式,但它不起作用。什么正则表达式?

notepad++ regex engine 是否还有 OR 运算符?

【问题讨论】:

  • notepad++ 正则表达式引擎从版本 10.1.1 开始有一个 OR 运算符。

标签: regex notepad++


【解决方案1】:

看起来 Don Ho 添加了 RegEx OR |
中的 Notepad++ 原生 Find 运算符 最新版本的记事本(版本 6.1.1)。
here下载记事本6.1.1

安装记事本 6.1.1,然后转到 搜索->查找
查找内容:action(421|732|983)
搜索方式:(*) Regular Expression

点击Find Next按钮

【讨论】:

  • 完整的正则表达式是我在 6.0 中添加的。它经历了几轮改进和其他贡献(主要是 F.R. Boyer),并且在 6.3.1 中非常稳定、可靠并且符合您的预期。
【解决方案2】:

现在可以在记事本中 >= 10.1.1。 根据Dragos Toader:“截至今天的最新版本(记事本 10.1.1)支持 | in RegEx”

== 下面的原始答案==

这在 Notepad++ 中是不可能的。 See this answer.

但是您的正则表达式不正确。这个可以工作:action(421|732|983) 如果 Notepad++ 支持正则表达式中的|

【讨论】:

  • 嗯...这似乎也不起作用!?反正不在我的 Notepad++ 中... edit @Jonathan 这对你有用吗??
  • 它不起作用 - 我认为这会找到 action4273283 和 action4213983 的组合......
  • 不,() 表示一个组。 | 表示 OR。在 PHP 中,这个正则表达式可以完美运行。在记事本++中,我无法让它工作。我已经用 PHP 中的一个有效示例更新了答案。
  • 我觉得这很奇怪:screencast.com/t/bL13glMp1K8Z edit 更好的截图:screencast.com/t/fSmS4ZRmNDt
  • 更新了答案。重要的是您要记住正确的正则表达式;)因为它们通常非常有用!并且由前端和后端的每一种半体面的语言支持。请参阅regular-expressions.info/quickstart.html 以获得快速帮助。
【解决方案3】:

您可以将regex helper plugin 用于Notepad++,但这更多的是用于正则表达式开发而不是替换,但是如果您只是想查找,我认为这个插件会有所帮助。

【讨论】:

  • 谢谢,但我真的需要notepad++具有的“在当前文档中查找所有内容”和“计数”等功能......
  • @Jonathan 您确实可以找到所有并计数。看截图。它会突出显示所有内容,并且在窗口的右下方,您会看到匹配项,即计数。
  • 你说得对,我仍然发现 Regex Helper 是一个有限的工具
【解决方案4】:

Notepad++ doesn't support 交替运算符|。 您可以尝试 textfx ctrl+R 正则表达式选项,但我认为也是如此。

【讨论】:

  • 更正了作为 Notepad++ 核心的 Scintilla RegEx 功能。但是,可以使用插件修改 Notepad++ 行为。仅搜索或搜索和替换操作可以重定向到外部插件库函数。 Notepad++ PythonScript 插件支持 Python 正则表达式搜索和搜索替换操作。请参阅下面的答案。
  • 今天的最新版本(记事本 10.1.1)支持 |在正则表达式中
【解决方案5】:

使用PythonScript Notepad++ 插件实现 Python 正则表达式搜索功能。
功能见here

Editor.pysearch(expression, function[, flags[, startLine[, endLine]]])

Editor.pymlsearch(expression, function[, flags[, startPosition[, endPosition]]])  

这是一个使用python正则表达式搜索函数editor.pysearch()的简单程序
我留下了很多调试代码,所以你可以看到函数运行过程中发生了什么。

# $Revision: 1.3 $
# $Author: dot $
# $Date: 2012/04/19 00:03:26 $

from Npp import *
import re, string

expression = notepad.prompt(
                 "Enter the RegEx search string then press Enter",
                 "RegEx and Search" ,
                 "")

debug = True
#debug = False

if debug:
    bufferID = notepad.getCurrentBufferID()

if debug:
    # Show console for debugging
    console.clear()
    console.show()

if expression != None:
    expressionSansNl = expression.replace('\r\n', '')

    if debug:
        console.write( expression + "\n" )

    # First we'll start an undo action, then Ctrl-Z will undo the actions of the whole script
    editor.beginUndoAction()

    if debug:
        console.write( 'editor.pysearch( r"%s" % expressionSansNl, None)\n' )

    editor.pysearch( r"%s" % expressionSansNl, None)

    # End the undo action, so Ctrl-Z will undo the above two actions
    editor.endUndoAction()

# Debug
if debug:
    notepad.activateBufferID(bufferID)

将此脚本映射到 Notepad++ 快捷方式 Ctrl+<ChooseALetter> 并运行它。
输入搜索 RegEx action(421|732|983)
根据 Python re 文档here,支持| RegEx 运算符。

我还没有测试过——也许 pysearch() 函数中的 None 参数需要
成为一个将选择结果字符串的函数。根据文档here
该函数应该返回一个 python MatchObject。我认为有办法获得
MatchObject 中的匹配字符串并选择该匹配项的下一个外观
编辑器对象中的字符串。完成编码后,我将发布答案的新修订版
并对此进行测试。

【讨论】:

  • 此答案适用于 10.1.1 之前的 Notepad++ 版本。在 Notepad++ 中,RegEx OR |运算符可用。
【解决方案6】:

您的正则表达式似乎是正确的。但尝试使用这个:

action(421|732|983)

【讨论】:

  • 它不起作用 - 我认为这会找到 action4273283 和 action4213983 的组合......
猜你喜欢
  • 1970-01-01
  • 2018-11-17
  • 1970-01-01
  • 1970-01-01
  • 2016-05-18
  • 2014-05-03
  • 2013-03-19
相关资源
最近更新 更多