Notepad ++ удалить текст между двумя строками, используя регулярное выражение

Я хочу удалить текст между двумя строками, используя regular expression в блокнот ++. Вот моя полная строка

[insertedOn]) VALUES (1, N'1F9ACCD2-3B60-49CF-830B-42B4C99F6072',

Я хочу финальную строку вроде этой

[insertedOn]) VALUES (N'1F9ACCD2-3B60-49CF-830B-42B4C99F6072',

Здесь я удалил 1, из строки. 1,2,3 идет в возрастающем порядке.

Я пробовал много выражаться, но не получилось. Вот один из них (VALUES ()(?s)(.*)(, N')

Как я могу это удалить?

Попробуйте (VALUES \().*?,\s*(N') => $1$2

Wiktor Stribiżew 17.04.2018 09:19

Спасибо за ответ. Я попробовал этот (VALUES \().*?,\s*(N'), и он работал :)

Ajay 17.04.2018 09:22

Отправил ответ с пояснениями.

Wiktor Stribiżew 17.04.2018 09:30
Стоит ли изучать 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 называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
3
3 638
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы должны сначала экранировать буквальный ( перед VALUES: \(

Таким образом, .* в вашем регулярном выражении в дополнение к флагу s (DOTALL) заставляет движок жадно соответствовать до конца входной строки, а затем возвращается к остановке при первом появлении , N', что означает неожиданные совпадения.

Чтобы улучшить ваше регулярное выражение, вы должны 1) сделать .* unngreedy 2) удалить (?s) 3) уйти от (:

(VALUES \().*?, (N')

Чтобы быть более точным в сопоставлении, вам лучше искать:

VALUES \(\K\d+, *(?=N')

и ничего не заменить.

Авария:

  • VALUES \( Март VALUES ( буквально
  • \K Сбросить совпадение
  • \d+, * Соответствие цифрам перед запятой и необязательными пробелами
  • (?=N'), за которым следует N'

Спасибо за ответ :)

Ajay 17.04.2018 09:34
Ответ принят как подходящий

Вы можете использовать

(VALUES \().*?,\s*(N')

и замените на $1$2. Обратите внимание: если удаляемая часть строки может содержать разрывы строк, включите . соответствует новой строке. Если N и VALUES должны быть сопоставлены только в ALLCAPS, убедитесь, что опция Учитывать регистр отмечена.

Детали выкройки

  • (VALUES \() - Группа 1 (позже именуемая $1 из шаблона замены): буквальная подстрока VALUES (
  • .*? - любые символы 0+, как можно меньше, до крайнего левого вхождения последующих подшаблонов
  • ,\s* - запятая и 0+ пробелов (используйте \h вместо \s для соответствия только горизонтальным символам пробелов)
  • (N') - Группа 2 (позже именуемая $2 из шаблона замены): буквальная подстрока N'.

Относительно второстепенный момент, но вместо использования .*? лучше использовать [^,]*. На самом деле это не имеет значения для этой конкретной строки, но когда у вас есть более длинные строки для сопоставления, использование ленивого квантификатора менее эффективно. При использовании ленивого квантификатора требуется в два раза больше шагов, чем при проверке каждого символа дважды, тогда как при использовании [^,] просто сопоставляется, пока не дойдет до ,.

JackPRead 17.04.2018 11:15

Еще одна вещь, которая является просто выбором стиля, - в одном случае вы используете `` для пробелов после значений, а в другом вы используете \s. Это не имеет значения, но я бы выбрал один и придерживался его. Я предпочитаю \s для удобства чтения.

JackPRead 17.04.2018 11:18

@JackPRead Я вижу, я также объяснил, что \h может быть более полезным, чем \s .. [^,]* - спорное усовершенствование, потому что оно предотвратит совпадение, если есть , на пути от VALUE ( к N'.

Wiktor Stribiżew 17.04.2018 11:35
.*?, и [^,]*, соответствуют одному и тому же, за исключением того, что первый требует вдвое больше шагов. И то, и другое предотвратит совпадение, если по пути окажется ,, как вы сказали. Как я уже сказал выше, для строки такого размера оптимизация незначительна, и для этой строки действительны оба регулярных выражения.
JackPRead 17.04.2018 11:50

@JackPRead Нет, [^,]* не может соответствовать так же, как .*?здесь, см. мое регулярное выражение против ваш вариант. Они работают одинаково только тогда, когда справа есть один атом (например, a.*?b = a[^b]*b). В сценарии OP правая граница представляет собой последовательность шаблонов, поэтому .*? более подходит.

Wiktor Stribiżew 17.04.2018 11:52

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