3

Я хотел бы знать, есть ли способ поиска файла для двух вещей в одной строке. Например, если я хочу найти строку с «variable> =» и «variable> =». Проблема в том, что я не знаю, что такое "переменная" (ну, в файле много разных переменных, и я ищу дубликат проверки переменных в одной строке).

Кто-нибудь может мне с этим помочь?

2 ответа2

1

У вас есть несколько вариантов ...

В любом случае, прежде чем начать:

  • откройте диалоговое окно "Найти" (Ctrl+f) или "Заменить" (если вы знаете, что хотите делать дальше),
  • установите переключатель "Регулярное выражение" в левом нижнем углу диалогового окна.
  • Здесь я буду предполагать, что вы ищете дубликаты шаблонов, таких как variable >= something или hour >= NUM .
  • Кроме того, я сгруппирую как можно больше, так что позже вы сможете заменить, сохранив или выбросив любую часть по мере необходимости.

(1) Явный поиск

Вы знаете дубликаты и можете найти их явно, например:

((variable)\s*>=\s*\S+)(.*)(\2\s*>=\s*\S+)

Или для "часа" просто замените слово "переменная" словом "час":

((hour)\s*>=\s*\S+)(.*)(\2\s*>=\s*\S+)

Объяснение:

Каждый набор скобок слева направо является группой. Поэтому у вас будет следующее:

Группа 1 : ((variable)\s*>=\s*\S+) : находит строку, которая начинается с "переменной", за которой следует \s (пробел) и * означает любое количество пробелов (следовательно, вы можете иметь « переменная> = "или" переменная> = "), то символы >= затем больше \s* (любые пробелы), затем, наконец, ЛЮБОЙ непробельный символ \S+ (+ говорит, что должен быть хотя бы один).

Группа 2 : (variable) : Группа 2 находится в группе 1, и это просто способ извлечь имя "переменная".

Группа 3 : (.*) : НИКАКОЕ из двух дубликатов вы найдете. Это позволяет вам что-то делать с этим дополнительным текстом, если он существует.
ВНИМАНИЕ, если есть три (или более) дубликата, это будет использовать шаблоны в середине, в результате чего group1 и group4 содержат ТОЛЬКО первый и последний дубликаты. Если вы хотите найти последовательные дубликаты, измените эту часть на (.*?); ? делает его нежадным, т.е. найдет минимум . (что-нибудь).

Группа 4 : (\2\s*>=\s*\S+) : Наконец, это дубликат. Причина, по которой он дублируется, состоит в том, что шаблон такой же, как в группе 1, за исключением того, что он использует \2 , что является просто способом сказать, что находится в группе 2. В данном случае это слово "переменная".

Второй шаблон для "часа", как вы увидите, идентичен, за исключением того, что он ищет "час", а не "переменную".

(2) Найти неизвестные повторяющиеся узоры

С небольшой модификацией вы можете искать ЛЮБЫЕ дубликаты одного и того же шаблона:

((\w+)\s*>=\s*\S+)(.*)(\2\s*>=\s*\S+)

Объяснение:

Это идентично нахождению дубликатов с явно известными именами. Разница здесь заключается в использовании \w+ (любое буквенно-цифровое слово) вместо слова типа "переменная"/"час".

\w+ : \w соответствует любому символу слова (включая прописные, строчные и цифры, но не знаки препинания или другие символы). + Снова способ сказать хотя бы один. Поэтому с помощью \w+ вы найдете любое буквенно-цифровое слово.

0
  1. Откройте диалоговое окно «Найти ...»
  2. Установите "Режим поиска" на "Регулярное выражение"
  3. Снимите флажок ". Соответствует новой строке"
  4. Искать: variable\s*?>=.*?variable\s*?>=

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