Удалите все после второго двоеточия

Мне нужно удалить все после двоеточия, следующего за оранжевым

Пример:

apple:orange:banana:grapes:

Становится:

apple:orange

Я просмотрел миллион разных ссылок по этому поводу и не могу найти решения.

В настоящее время это делается в Notepad ++ с помощью функции «Найти / заменить».

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
1 794
3

Ответы 3

Найти то, что: (^[a-z]+:[a-z]+).*$

  • (^[a-z]+:[a-z]+) Первая группа захвата. Соответствие буквенным символам в начале строки, двоеточию, буквенным символам.
  • .*$ Соответствует чему угодно до конца строки.

Заменить: \1

  • \1 Заменить захваченной группой один.

Конечно, вы могли бы сделать это выражение более общим:

Найти то, что: (^[^:]+:[^:]+).*$

  • (^[^:]+:[^:]+) Группа захвата. Соответствует чему-либо, кроме двоеточия в начале строки, двоеточия, любому другому, кроме двоеточия.
  • .*$ Соответствует чему угодно до конца строки.

Заменить: \1

  • \1 Заменить захваченной группой один.

Как указано revo в комментарии ниже, вы должны отключить опцию matches newline при использовании шаблонов выше в Notepad ++.

Достаточно хорошо иметь ^([^\r\n:]*:[^\r\n:]*).* в качестве регулярного выражения.

revo 04.08.2018 19:05

Действительно, нет необходимости во второй группе захвата. Я отредактирую, ура.

Paolo 04.08.2018 19:07

Нет необходимости в якоре $ и квантификаторе +. Также рассмотрение новых строк должно быть здесь обходным путем, иначе оно может совпадать больше, чем необходимо.

revo 04.08.2018 19:08

Не нужно быть уверенным, но, вероятно, это хорошая практика. Тем не менее, хороший момент о новой строке.

Paolo 04.08.2018 19:11

Извините, но это, вероятно, не очень хорошая практика, поскольку OP может ничего не иметь до и после первого двоеточия, а выполнение .* делает знак доллара бесполезным.

revo 04.08.2018 19:14

Отключение . соответствует новым строкам не влияет на [^:]+. [^:]+ выходит за рамки одной строчки. Вы должны явно включить CRLF.

revo 04.08.2018 19:15

Из предоставленной строки OP это так. В моей версии Notepad ++ это по умолчанию, возможно, потому, что я использую Windows.

Paolo 04.08.2018 19:17

ОС не имеет значения. [^:]+ означает что угодно, кроме двоеточия, которым может быть \r или \n.

revo 04.08.2018 19:19

Я знаю об этом. Я тестировал его на своем Notepad ++, и строки на новых строках не заменялись.

Paolo 04.08.2018 19:21

да, это буквально просто выделение всех моих строк, даже при использовании "соответствует новой строке"

Zackary Dane 04.08.2018 23:29

@Zachary Вы пробовали отключить matches newline?

Paolo 04.08.2018 23:30

Насколько велик файл?

Если это небольшой файл, вы, вероятно, могли бы написать простой код вроде следующего фрагмента в java. Большинство языков программирования поддерживают такие операции.

String input = "apple:orange:banana:grapes:";
String[] arrOfStr = input.split(":");
int index = arrOfStr.indexOf("orange");
String[] arrOfStrSub = Arrays.copyOf(arrOfStr, 0, index);
String output = StringUtils.join(arrOfStrSub, ':');

Это не отвечает на вопрос, они хотят решение для блокнота ++.

Toto 05.08.2018 10:29

Если я вас правильно понял, вы можете использовать для этого плагин ConyEdit. Вы можете использовать его команду cc.dac <nth>/<regex>/[<mode>] [-options]. cc.dac означает: удалить после столбца.

Например:
Когда ConyEdit работает в фоновом режиме, скопируйте текст и командную строку ниже, затем вставьте:

 apple:orange:banana:grapes:
 cc.dac 2/:/ -d

Другие вопросы по теме