Як замінити всі рядки на числа, що містяться в кожній рядку в Блокноті ++?


108

Я намагаюся знайти всі значення за наступним малюнком:

value="4"
value="403"
value="200"
value="201"
value="116"
value="15"

і замінити його на значення всередині діапазонів.

Я використовую наступний регулярний вираз, щоб знайти шаблон:

.*"\d+"

Як я можу зробити заміну?


2
Що таке запасна частина? Чи можете ви навести приклад?
Toto

^. * value = "([^"] *) ". * $ перевірте цей регулярний вираз і відновіть значення \ 1 там, де потрібне значення
Nikhil KS

Відповіді:


191

У Блокноті ++ для заміни натисніть Ctrl+, Hщоб відкрити меню Замінити.

Потім, якщо ви встановите прапорець "Регулярний вираз" і хочете, щоб у вашій заміні використовувалася частина відповідного шаблону, ви повинні використовувати "групи захоплення" (докладніше читайте на Google ). Наприклад, скажімо, що ви хочете відповідати кожному з наступних рядків

value="4"
value="403"
value="200"
value="201"
value="116"
value="15"

використовуючи .*"\d+"шаблон і хочуть зберегти лише число. Потім ви можете використовувати захоплення групу в вашому відповідно шаблону, з допомогою круглих дужок (і ), як це: .*"(\d+)". Тож тепер у вашій заміні ви можете просто написати $1, де $ 1 посилається на значення 1-ї групи захоплення і поверне номер для кожного успішного матчу. Якщо у вас було дві групи захоплення, наприклад (.*)="(\d+)", $1повернете рядок valueі$2 поверне номер.

Отже, використовуючи:

Знайти: .*"(\d+)"

Замінити: $1

Це поверне тебе

4
403
200
201
116
15

Зауважте, що існує безліч альтернативних та кращих способів узгодження вищезгаданого шаблону. Наприклад, шаблон value="([0-9]+)"буде кращим, оскільки він більш конкретний, і ви будете впевнені, що він буде відповідати лише цим рядкам. Можна навіть зробити заміну без використання груп захоплення, але це дещо вдосконалена тема, тому я покину її :)


19
Для заміни $1мені не вийшло. Я використовував \1замість цього, і це спрацювало.
Джейсон Вілер

12
\1Працює у всіх версіях Notepad ++. $1працює лише в нових.
Cullub

Я здогадуюсь, це не працює з Hex Editorплагіном. У режимі перегляду в шістнадцятковій формі Блокнот ++ не відображає Regular Expressionпараметр Пошук / Заміна. У режимі перегляду тексту я бачу Regular Expressionможливість пошуку / заміни. Я використовую Notepad ++ версії 6.9.2, яка є поточною версією на даний момент.
Кевін Феган

15

psxls дав чудову відповідь, але я думаю, що моя версія Notepad ++ дещо відрізняється, тому захоплення знака $ (долар) не працювало.

У мене є Notepad ++ v.5.9.3, і ось, як ви можете виконати своє завдання:

Пошук шаблону: value = \ "([0-9] *) \" І замініть на: \ 1 (все, що ви хочете зробити навколо цієї групи захоплення)

Вих. Оточі квадратними дужками

[\ 1] -> виведе значення = "[4]"


1
\1Допоміг мені зберегти номер, але видалити цитату за ним. У мене було близько 7400 рядків у такому документі tablename.columnname = '12345'. Першу цитату було легко видалити, другу - за допомогою вашого \1текстового поля для заміни. Дякую, +1
Бен Франсен



-3

Знайти: value="([\d]+|[\d])"

Замінити: \1

Це дійсно поверне вас

4
403
200
201
116
15

js:

a='value="4"\nvalue="403"\nvalue="200"\nvalue="201"\nvalue="116"\nvalue="15"';
a = a.replace(/value="([\d]+|[\d])"/g, '$1');
console.log(a);

3
Як це рішення JavaScript стосується питання, позначеного тегом "Блокнот ++"?
Джейсон Аллер

Яким чином несправні, розбиті відповіді 1 та 2 можуть стосуватися питання, позначеного тегом "Блокнот ++"?
user3178007

Чому я тут задав питання? Тому що я не можу створювати запитання. Тому що у мене недостатньо балів репутації.
user3178007

1
Немає такої вимоги до репутації, щоб задавати питання, як ви заявляєте - ви, можливо, не могли бути обмежені. Спробуйте ще раз: stackoverflow.com/questions/ask
BoltClock

Питання було задано. stackoverflow.com/questions/24112018/… Але в словах обмежений пошук. Обмеження є!
user3178007
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.