如何使用 Notepad++ 在任何排列的同一行上找到多个值?

Gru*_*uff 13 notepad++ regex

我正在使用 Notepad++,并且我正在尝试找到一种可以在同一行上搜索多个值的方法。正则表达式搜索目前对我不起作用,因为我可能不知道值的顺序。

例如,我想搜索具有三个特定值的一行代码。.*在正则表达式搜索中使用不起作用,因为您必须知道值的顺序。我可以在不知道值顺序的情况下搜索这些行吗?

在每一行我可能有一个交易日志,其中有 30 个不同的标签。我想搜索35=D, EUR/USD, 150=8. 我只想搜索所有三个值都存在的条目。

我遇到的问题是无法保证这些标签的顺序,因此我在下面使用的正则表达式搜索并不总能找到我需要的每个条目。

35=D.*EUR/USD.*150=8
Run Code Online (Sandbox Code Playgroud)

Tot*_*oto 22

使用先行更有效,可以处理任意数量的交替,而不会增加复杂性:

  • Ctrl+F
  • “找什么”^(?=.*\b35=D\b)(?=.*\bEUR/USD\b)(?=.*\b150=8\b).+$
  • 勾选“匹配案例”
  • 勾选“环绕”
  • 勾选“正则表达式”
  • 取消选中 .匹配换行符”
  • Find All in Current Document

解释:

^               # Beginning of line
  (?=           # Start positive lookaead, make sure we have after:
    .*          # 0 or more any character but newline
    \b          # Word boundary to be sure not matching 135=DATA
    35=D        # Literally
    \b          # word boundary
  )             # End lookahead
  (?=           # Start positive lookaead, make sure we have after:
    .*          # 0 or more any character but newline
    \b          # Word boundary
    EUR/USD     # Literally
    \b          # Word boundary
  )             # End lookahead
  (?=           # Start positive lookaead, make sure we have after:
    .*          # 0 or more any character but newline
    \b          # Word boundary
    150=8       # Literally
    \b          # Word boundary
  )             # End lookahead
  .+            # One or more any character but newline
$               # End of line
Run Code Online (Sandbox Code Playgroud)

屏幕截图:

在此处输入图片说明


Fre*_*ddy 10

要仅匹配所有三个字符串都存在的那些行,您可以使用替代|运算符并将(...)您的模式分组以构建所有可能排列的正则表达式:

(35=D.*EUR/USD.*150=8)|(35=D.*150=8.*EUR/USD)|(EUR/USD.*150=8.*35=D)|(EUR/USD.*35=D.*150=8)|(150=8.*35=D.*EUR/USD)|(150=8.*EUR/USD.*35=D)
Run Code Online (Sandbox Code Playgroud)

添加换行符的可读版本:

(35=D.*EUR/USD.*150=8)|
(35=D.*150=8.*EUR/USD)|
(EUR/USD.*150=8.*35=D)|
(EUR/USD.*35=D.*150=8)|
(150=8.*35=D.*EUR/USD)|
(150=8.*EUR/USD.*35=D)
Run Code Online (Sandbox Code Playgroud)

这将匹配存在35=D,EUR/USD150=8(以及可能的文本之间)组合的所有行。在此示例文本中,只有最后三行会匹配(按钮“在当前文档中查找全部”):

some text 35=D
some text EUR/USD more text 150=8
some text 35=D more text EUR/USD more text 150=8
some text EUR/USD more text 35=D more text 150=8 more text
some text 150=8 more text EUR/USD 35=D more text
Run Code Online (Sandbox Code Playgroud)


截屏

  • @user726730 | operator 是一个正则表达式特性,几乎所有的 RE 库(包括 PHP 和 JS)都支持。它当然与布尔值或咬合或那些编程语言不同 (2认同)