Я не очень продвинутый с регулярным выражением, поэтому я не уверен, как это сделать. Допустим, у меня есть текстовый файл, который содержит более 1000 строк данных. Я хочу найти слова «команда» и «найти». Они встречаются во многих местах по всему документу, но только в строке 100 они встречаются в одной строке, например: The linux command to search files and folders is find. Допустим, я не знаю порядок этих двух слов, где они находятся внутри строки.

Можно ли с помощью регулярного выражения непосредственно выбирать эту строку при поиске 'command' и 'find' и игнорировать другие строки, где слова встречаются только один раз?

2 ответа2

2

Попробуйте ^.*(command|find).*$ В Sublime text (как я пытался это сделать в ST3, в Windows 10).
Мой ответ основан на ответе в переполнении стека.

РЕДАКТИРОВАТЬ: RE выше позволяет "команда" ИЛИ "найти", не настаивая на ОБА. С другой стороны, он позволял получать в результате ненужные выражения, такие как "commander", "find" или "видоискатель".

(\<command\>.*\<find\>)|(\<find\>.*\<command\>)

устраняет эти ложные попадания. Обратите внимание на последовательности \<и>, которые означают начало и конец слова.

1

В vim вы можете использовать .*\<command\>\&.*\<find\> .  Как указывает Гомбай Шандор, \<…\> разграничивает слова, поэтому, если вы просто хотите найти строки "command" и "find" (даже если они встречаются как часть более крупных слов, например, "commander"), вы можно опустить \< и \> .

Справка: поисковый запрос gvim для смешанных условий И & ИЛИ.

Примечание: это имеет незначительный недостаток: он оставляет курсор в начале строки (который содержит оба слова), а не на любом из искомых слов (если только он не появляется в начале строки).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .