我正在使用 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