Как найти несколько значений в одной строке в любой перестановке с помощью Notepad++?

Как найти несколько значений в одной строке в любой перестановке с помощью Notepad++?

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


Скриншот

Связанный контент