




Найти то, что: (^[a-z]+:[a-z]+).*$
(^[a-z]+:[a-z]+) Первая группа захвата. Соответствие буквенным символам в начале строки, двоеточию, буквенным символам..*$ Соответствует чему угодно до конца строки.Заменить: \1
\1 Заменить захваченной группой один.Конечно, вы могли бы сделать это выражение более общим:
Найти то, что: (^[^:]+:[^:]+).*$
(^[^:]+:[^:]+) Группа захвата. Соответствует чему-либо, кроме двоеточия в начале строки, двоеточия, любому другому, кроме двоеточия..*$ Соответствует чему угодно до конца строки.Заменить: \1
\1 Заменить захваченной группой один.Как указано revo в комментарии ниже, вы должны отключить опцию matches newline при использовании шаблонов выше в Notepad ++.
Действительно, нет необходимости во второй группе захвата. Я отредактирую, ура.
Нет необходимости в якоре $ и квантификаторе +. Также рассмотрение новых строк должно быть здесь обходным путем, иначе оно может совпадать больше, чем необходимо.
Не нужно быть уверенным, но, вероятно, это хорошая практика. Тем не менее, хороший момент о новой строке.
Извините, но это, вероятно, не очень хорошая практика, поскольку OP может ничего не иметь до и после первого двоеточия, а выполнение .* делает знак доллара бесполезным.
Отключение . соответствует новым строкам не влияет на [^:]+. [^:]+ выходит за рамки одной строчки. Вы должны явно включить CRLF.
Из предоставленной строки OP это так. В моей версии Notepad ++ это по умолчанию, возможно, потому, что я использую Windows.
ОС не имеет значения. [^:]+ означает что угодно, кроме двоеточия, которым может быть \r или \n.
Я знаю об этом. Я тестировал его на своем Notepad ++, и строки на новых строках не заменялись.
да, это буквально просто выделение всех моих строк, даже при использовании "соответствует новой строке"
@Zachary Вы пробовали отключить matches newline?
Насколько велик файл?
Если это небольшой файл, вы, вероятно, могли бы написать простой код вроде следующего фрагмента в 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, ':');
Это не отвечает на вопрос, они хотят решение для блокнота ++.
Если я вас правильно понял, вы можете использовать для этого плагин ConyEdit. Вы можете использовать его команду cc.dac <nth>/<regex>/[<mode>] [-options]. cc.dac означает: удалить после столбца.
Например:
Когда ConyEdit работает в фоновом режиме, скопируйте текст и командную строку ниже, затем вставьте:
apple:orange:banana:grapes:
cc.dac 2/:/ -d
Достаточно хорошо иметь
^([^\r\n:]*:[^\r\n:]*).*в качестве регулярного выражения.