Notepad++中的正则表达式OR

33

我想在Notepad++中查找所有以下实例

action421
action732
action983

但忽略所有其他 actionXXX 的组合。

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

Notepad++ 的正则表达式引擎 是否甚至有一个 OR 运算符?


3
截至版本10.1.1,Notepad++的正则表达式引擎具有OR运算符。 - user78706
6个回答

38

看起来Don Ho在最新版本的Notepad(ver. 6.1.1)中添加了正则表达式OR |运算符到Notepad++本地查找功能。
这里下载Notepad 6.1.1

安装Notepad 6.1.1,然后转到 搜索->查找
查找内容:action(421|732|983)
搜索模式:(*) 正则表达式

单击查找下一个按钮


1
完整的正则表达式是由我在6.0中添加的。它经历了几轮改进和其他贡献(主要是F.R. Boyer),在6.3.1中非常稳定、坚实,并且能够按照你的期望工作。 - Dave Brotherstone

10

现在在Notepad>=10.1.1版本中可以实现。根据Dragos Toader的说法:“截至今天最新版本(Notepad 10.1.1)支持正则表达式中的|”

== 原始答案如下 ==

在Notepad++中不可能。看看这个答案。

但是你的正则表达式不正确。如果Notepad++支持正则表达式中的|,那么这个正则表达式将会起作用:action(421|732|983)


嗯...这好像也不起作用!?在我的Notepad++里也是如此... 编辑 @Jonathan 这对你有用吗? - Rudie
它不起作用 - 我认为它会找到类似action4273283和action4213983的组合... - Jonathan Livni
没有 () 表示一组。| 表示 OR。在 PHP 中,这个正则表达式完美地工作。在 Notepad++ 中,我无法让它工作。我已经更新了一个在 PHP 中工作的例子。 - Rudie
我觉得这很奇怪:http://screencast.com/t/bL13glMp1K8Z 编辑 更好的截图:http://screencast.com/t/fSmS4ZRmNDt - Rudie
更新的答案。重要的是,你要记住正确的正则表达式;因为它们非常非常有用!而且几乎每一种像样的前端和后端语言都支持它们。请参考http://www.regular-expressions.info/quickstart.html获取快速帮助。 - Rudie
显示剩余4条评论

6
你可以在Notepad++中使用正则表达式助手插件,但它更适合于正则表达式开发而不是替换,但如果你只想查找,我认为这个插件会有帮助。

谢谢,但我真的需要像Notepad++那样的功能,比如“查找当前文档中的所有”和“计数”。 - Jonathan Livni
1
@Jonathan,你可以使用“查找全部”和“计数”功能。请看屏幕截图。它会突出显示所有匹配项,并在窗口右下角显示匹配项数量。 - manojlds
你说得对,我仍然觉得正则表达式助手是一个有限的工具。 - Jonathan Livni

1
Notepad++ 不支持备选运算符|。您可以尝试使用textfx ctrl+R正则表达式选项,但我认为结果是一样的。

关于Notepad++核心的Scintilla RegEx功能是正确的。但是,Notepad++的行为可以使用插件进行修改。仅搜索或搜索和替换操作可以重定向到外部插件库函数。Notepad++的PythonScript插件支持Python正则表达式搜索和搜索替换操作。请参见下面的答案。 - user78706
截至今天最新版本的记事本(Notepad 10.1.1)支持在正则表达式中使用竖线|。 - user78706

1
使用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>并运行它。
输入搜索正则表达式action(421|732|983)
根据Python re文档here,支持|正则表达式操作符。

我还没有测试过这个--也许pysearch()函数中的None参数需要
是一个选择结果字符串的函数。根据文档here
该函数应返回一个python MatchObject。我认为有一种方法可以从MatchObject中获取匹配字符串,并选择编辑器对象中下一个出现的匹配字符串。完成编码和测试后,我将发布答案的新版本。


此答案适用于 Notepad++ 10.1.1 版本之前。在 Notepad++ 中,正则表达式 OR | 运算符是可用的。 - user78706

0

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

action(421|732|983)

它不起作用 - 我认为它会找到类似action4273283和action4213983这样的组合... - Jonathan Livni

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