我正在使用 Notepad++,并尝试找到一种方法来在同一行上搜索多个值。正则表达式搜索目前对我来说不起作用,因为我可能不知道这些值的顺序。
例如,我想搜索一行具有三个特定值的代码。使用.*
正则表达式搜索不起作用,因为您必须知道值的顺序。我可以在不知道值顺序的情况下搜索这些行吗?
每行我可能都有一个包含 30 个不同标签的交易日志。我想搜索35=D, EUR/USD, 150=8
。我只想搜索包含所有三个值的条目。
我遇到的问题是这些标签的顺序无法保证,因此我下面使用的正则表达式搜索并不总能找到我需要的每个条目。
35=D.*EUR/USD.*150=8
答案1
使用展望效率更高,可以处理任意数量的交替而不会增加复杂性:
- 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
屏幕截图:
答案2
为了仅匹配所有三个字符串都存在的行,您可以使用替代|
运算符并对(...)
模式进行分组以构建所有可能排列的正则表达式:
(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)
添加了换行符的可读版本:
(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)
35=D
这将匹配所有包含、EUR/USD
和(以及它们之间可能的文本)组合的行150=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