поиск и замена

Russian main discussion
Post Reply
  • Author
  • Message
Offline
Posts: 3234
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

FeyFre
Для обычного пользователя эта логика непонятна, понятно только, что так сделано чтобы что-то где-то внутри было легче.
Но можно сделать как в Eclipse (у меня редактор на его основе):
- при наборе разделителей слева или справа в поле галка дизаблится;
- при вставке из него из буфера обмена галка автоматом снимается.
В обоих случаях текст ищется как бы без неё.

Offline
Site Admin
Posts: 6403
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

VladSh
Словом поиск считает все, что имеет слева и справа: разделитель или начало строки или конец строки. Т.е. в вашем случае, чтобы найти ', слева и справа от символа должны находится разделители или начало строки или конец строки

Offline
Posts: 3234
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

Циклический поиск - хорошая штука, но когда и замена начинается циклически, то это плохо, - опять приходится проверять, т.к. оно уже проверенные находит и пытается заменить (поймал себя на том, что несколько раз по ошибке делал замену, не сообразив, что оно по кругу началось).

Offline
Posts: 1
Joined: Wed Jun 27, 2012 7:38 am

Post by schumakow »

Помогите.

Можно ли сделать в программе чтобы удалять участки текста находящиеся между тегами

Code: Select all

<td> различный текст </td>
вместе с тегами td.

Как это реализовать за ранее спасибо.

KDJ
Offline
Posts: 1949
Joined: Sat Mar 06, 2010 7:40 pm
Location: Poland

Post by KDJ »

schumakow
Replace (Ctrl+R) with Regular expressions:
What: <td>[\s\S]*</td>
With:

Offline
Posts: 874
Joined: Sat Jan 16, 2010 2:03 pm

Post by opk44 »

schumakow
1. Ответ на Ваш вопрос уже есть в этой ветке всего одной страницей ранее (там даже более сложная ситуация рассмотрена).
Нужно только взять и применить к своему случаю.
Use script: SearchReplace.js.
What: (<td>)[\s\S]*?(</td>)
With:
Select: Regular expressions

2. Возможно имеет смысл в шаблоне поиска убрать закрывающую угловую скобку у тега <td>
Use script: SearchReplace.js.
What: (<td)[\s\S]*?(</td>)
With:
Select: Regular expressions

тогда будут определяться, например, и такие случаи тоже:

Code: Select all

 <td style="text-align: right"> Какой-то текст </td> 
3. Если замены единичны, редки, и очень не хочется связываться с Регулярными выражениями, то можно воспользоваться выделением на панели CodeFold (фолдинговая панель Coder-плагина), а затем удалять выделенное. Но это очень непроизводительно.

Offline
Posts: 88
Joined: Sun Jun 03, 2012 8:15 am

Post by Visitor7 »

What: <td>[\s\S]*</td>
Что: (<td>)[\s\S]*?(</td>)
Данные выражения целиком выделяют следующий текст:

Code: Select all

<td></td></tr>
<tr>
<td width="210"> <img src="pic2.jpg" alt="" width="195" height="114" /></td>

KDJ
Offline
Posts: 1949
Joined: Sat Mar 06, 2010 7:40 pm
Location: Poland

Post by KDJ »

Visitor7
Looks like a bug in AkelPad.
AkelHelp-Eng.htm (4.7.7) wrote:Regular expression quantifiers (*, +, {n,}) are always non-greedy.

Offline
Posts: 88
Joined: Sun Jun 03, 2012 8:15 am

Post by Visitor7 »

Regular expression quantifiers (*, +, {n,}) are always non-greedy.
Я понял, а как написать:
<td(.* но без ">")>(.* но без "<td" и "</td")</td>

Offline
Posts: 1873
Joined: Mon Aug 06, 2007 1:07 pm
Contact:

Post by Infocatcher »

но без "<td"
Вроде как, полноценный парсер XML/HTML на регулярных выражениях принципиально невозможен. Если только с рекурсией типа как в Perl.
Во всяком случае, вряд ли получится в общем случае обойтись только одной заменой.

В простом вариант можно только исключить один уровень вложенности вида

Code: Select all

<td>
  ...
  <td> ... </td>
  ...
</td>
Если без учета вложенности, то в SearchReplace.js должна сработать такая замена:
<td[^>]*>[\s\S]*?</td>
=> (пустая строка)

Offline
Posts: 88
Joined: Sun Jun 03, 2012 8:15 am

Post by Visitor7 »

Значит в SearchReplace.js не хватает строки "исключить"))) Можно было б орудовать.
Что искать: <td[^>]*>[\s\S]*?</td>
Исключить если в найденном есть: <tr
Заменить на: пусто
Несколько проходов, в зависимости от степени вложенности, дали бы качественное удаление.

Offline
Posts: 12
Joined: Fri Oct 24, 2008 4:05 am
Location: где то рядом была Москва

Post by FiLinX »

вот тут ещё вопросец есть, насчёт дубликатов удаления.. подскажите, а возможно ли чтобы удалялись не только строки дублей, но вместе с ними и по одной строке над ними находящиеся? и лучше б конечно чтоб и сами пустые строки от них, тоже удалялись бы.. например:

Code: Select all

#EXTM3U
#EXTINF:-1,AutoMoto:первый автомобильный
rtmp://ms1.autoru.tv/live/360p
#EXTINF:-1,AutoMoto:1autotv.ru
rtmp://95.215.2.55/live/1autotv3
#EXTINF:-1,AutoMoto:OFFroadTV
rtmp://grey.ether.tv/live/fulltime/broadcast4
#EXTINF:-1,AutoMoto:retro
rtmp://live214.la3.origin.filmon.com:1935/live/784.high.stream
#EXTINF:-1,AutoMoto:Miami TV AutoShow
mmsh://74.208.43.204:90/autoshow
#EXTINF:-1,AutoMoto:AutoSport
mms://100automoto.tv/100livesport
#EXTINF:-1,AutoMoto:Porsche Channel
mms://100automoto.tv/channel_porsche
#EXTINF:-1,AutoMoto:Auto Italia Channel
mms://100automoto.tv/channel_italy
#EXTINF:-1,AutoMoto:Mercedes-Benz Channel
mms://100automoto.tv/channel_mercedes
#EXTINF:-1,AutoMoto:BMW Channel
mms://100automoto.tv/bmw
#EXTINF:-1,AutoMoto:utomoto
mms://www.100automoto.tv/bgtv1
#EXTINF:-1,AutoMoto:100gaz
mms://100automoto.tv/100gaz
#EXTINF:-1,AutoMoto:майами шоу
mmsh://74.208.43.204:90/autoshow
#EXTINF:-1,AutoMoto:4х4
rtmp://grey.ether.tv/live/fulltime/broadcast4
#EXTINF:-1,AutoMoto:порш
mms://100automoto.tv/channel_porsche
#EXTINF:-1,AutoMoto:мерс
mms://100automoto.tv/channel_mercedes
#EXTINF:-1,AutoMoto:ретро
rtmp://live214.la3.origin.filmon.com:1935/live/784.high.stream
имеется даже вебсервис, где подобное реализуется, но у меня часто инет отсутсвует, а править то самому и ловчее думаю)

PS: имеется ввиду, чтоб удалялись повторы, а первые оставались
PS:2 что то я снова недодумав сразу) а надо всё ещё сложнее - ведь сравнивать надо, только строки не содержащие в себе "#EXTINF:*"

TNX
Offline
Posts: 57
Joined: Thu Jul 12, 2012 10:59 am

Post by TNX »

FiLinX wrote:вот тут ещё вопросец есть, насчёт дубликатов удаления..
Так?
(#EXTINF:[^\n]*\n)([^\n]*\n)(.*)#EXTINF:[^\n]*\n\2
\1\2\3

Для SearchReplace.js:
(#EXTINF:.*\n)(.*\n)([\s\S]*)#EXTINF:.*\n\2
$1$2$3

PS. В обоих случаях требуется несколько проходов.

Offline
Posts: 88
Joined: Sun Jun 03, 2012 8:15 am

Post by Visitor7 »

Здорво работает, всетаки для многого не хватает режима "по кругу". А SearchReplace скушал $1$2$3 только в таких видах:
$1 + $2 + $3
$1 + $2 + $3;
$1, $2, $3
$1, $2, $3;

Offline
Posts: 2248
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

А SearchReplace скушал $1$2$3 только в таких видах:
Если стоит Replace with function, то единственный правильный вид конкатенации захватов - $1 + $2 + $3
Post Reply