Я использую 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