• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Notepad++ kopiowanie wklejanie określonej części tekstu w pętli

VPS Starter Arubacloud
0 głosów
3,138 wizyt
pytanie zadane 6 grudnia 2017 w C i C++ przez Grzegorz Mikina Dyskutant (8,060 p.)
Witam, szukałem ale nic nie pasuje do mojego zapytania, więc pytam. Chce hurtowo zamienić ileś linijek przykładowo ok 150.

<li><a target="_blank" href="http://..."title="..."Przykładowa nazwa</a></li>

<li>Przykładowa nazwa<a target="_blank" href="http://..."title="..."</a></li>

Dodam, że Przykładowa nazwa jest zmienną częścią, mogę to tak ustawić, żeby była jednakowo długa, może być zawarta między cudzysłowami, ale sam tekst jest zmienny. Wiem, że notepad++ jest bardzo rozbudowanym kompilatorem tekstu, jednak nie mam pomysłu.Czy ma ktoś jakiś pomysł jak to rozwiązać?

1 odpowiedź

0 głosów
odpowiedź 6 grudnia 2017 przez Tomek Sochacki Ekspert (227,510 p.)
wybrane 6 grudnia 2017 przez Grzegorz Mikina
 
Najlepsza

Według mnie najlepiej wyrażeniem regularnym, w notepad++ daj ctrl+H do okna wyszukana i podmiany tekstu, następnie w polu szukany tekst wpisujesz regexp i na dole zaznaczasz "wyrażenia regularne". Możesz sobie wtedy też ładnie analizować kolejne dopasowania i w razie czego poprawiać.

Napisz tylko dokładnie co na co chcesz zmienić, to znaczy daj jakiś konkretny przykład "tekst pierwotny" + "test po zmianie" to pomożemy stworzyć regexp.

Myślę, że moglibyśmy tutaj wyszukać tagi <a> i </a> i dopasować tekst pomiędzy nimi.

Jeśli chcesz zamienić <li><a ... >COS</a></li> na <li>COS<a ...></a></li> (tak wynika z Twojego opisu) to może to zrobić np. wzorzec:

 

szukany tekst: <li>(<a.*?>)(.+)<\/a><\/li>
zamień na:     <li>$2$1<\/a><\/li>

tylko napisz czy na pewno o to Ci chodzi, czy jakaś inna zmiana? Aha, i pamiętaj o włączeniu "wyrażenia regularne" na dole okna szukaj/zamień!

komentarz 6 grudnia 2017 przez Grzegorz Mikina Dyskutant (8,060 p.)
Tekst przed zamianą

<li><a target="_blank" href=""title="Bielany, pow. sokołowski"></a></li>

To co w title, ma być po li

<li>Bielany, pow. sokołowski<a target="_blank" href=""title="Bielany, pow. sokołowski"></a></li> może być razem z cudzysłowami, to już żaden problem... jakoś sobie to pozamieniam, byle program skopiował mi to co jest w title i wstawił po tagu li, i wartość ta ma być zmienna
komentarz 6 grudnia 2017 przez Tomek Sochacki Ekspert (227,510 p.)

W miejscu "szukaj" wpisz: <li>(<a.*?title="(.*?)".*?>)<\/a><\/li>

W miejscu zastąp: <li>$2$1<\/a><\/li>

+ na dole zaznacz "wyrażenia regularne" i kliknij zamień wszystko.

Na przykład:

<li><a target="_blank" href=""title="Bielany, pow. sokołowski"></a></li>
<li><a target="_blank" href=""title="xxxx"></a></li>
<li><a target="_blank" href=""title="yyy sss123"></a></li>

//Zamienia mi na:
<li>Bielany, pow. sokołowski<a target="_blank" href=""title="Bielany, pow. sokołowski"></a></li>
<li>xxxx<a target="_blank" href=""title="xxxx"></a></li>
<li>yyy sss123<a target="_blank" href=""title="yyy sss123"></a></li>

o coś takiego chodziło?

komentarz 6 grudnia 2017 przez Grzegorz Mikina Dyskutant (8,060 p.)
Dokładnie, o to to to. A mógłbyś mi kolego dokładnie wytłumaczyć ten zapis? Bo nie zabardzo rozumiem jak to działa?
komentarz 6 grudnia 2017 przez Tomek Sochacki Ekspert (227,510 p.)
Nie ma problemu, tylko powiedz mi czy wiesz czym są w ogóle wyrażenia regularne i czy miałeś z nimi jakiś kontakt?
komentarz 6 grudnia 2017 przez Grzegorz Mikina Dyskutant (8,060 p.)
Właśnie jakieś 5 minut temu, zrobiłem pierwszy arkusz, tzn poprawiłem. Nie wiem czym są, nie wiem do czego służą, nie miałem nigdy z nimi styczności. :(
komentarz 6 grudnia 2017 przez Tomek Sochacki Ekspert (227,510 p.)

To szczerze mówiąc ciężko będzie wyjaśnić ten wzorzec bo zawiera on pewne bardziej zaawansowane elementy regexp, ale spróbujemy :)

<li>(<a.*?title="(.*?)".*?>)<\/a><\/li>

<li>      //dopasowanie do znacznika <li>
(         //początek tzw. grupy z zapamiętaniem dopasowania ($1)
  a.*?    //wyszukaj znak "a" i dowolne inne znaki
  title=" //wyszukaj title, znak "+" i cudzysłów
  (.*?)   //wyszukaj i zapamiętaj w $2 title
  ".*?>   //drugi cudzysłów i dowolne znaki, a po nich ">"
)         //koniec grupy $1
<\/a>     //wyszukaj zamykający znacznik </a>
<\/li>    //wyszukaj zamykający znacznik </li>

W drugim wyrażeniu regularnym odnoszę się do zapamiętanych grup $1 i $2. Jeśli chciałbyś dokładnie zrozumieć co tutaj się dzieje to musiałbyś poczytać o podstawach wyrażeń regularnych. Tutaj zastosowałem pewne elementy, które nie zawsze są omawiane jak kwantyfikator niezachłanny i przechwytywanie grup, ale bez podstaw regexp nie ma za bardzo sensu ich wyjaśnianie.

Wyrażenie to można by w sumie nieco uprościć, ale nie będę już teraz komplikował, pisałem je trochę na szybko na kolanie i dopiero po czasie widzę, że co nieco można by zmienić :)

komentarz 6 grudnia 2017 przez Grzegorz Mikina Dyskutant (8,060 p.)
Kurcze, powiedzenie Wiem, że nic nie wiem odnajduje w tym poście znakomicie. Myślałem, że coś już wiem o notepadzie++ czy o programowaniu. Jednak muszę stwierdzić, że jestem zielony. ZNasz jakieś dobre książki o metodach pracy w Notepadzie ++, czytaj uproszczeniu, przyspieszeniu. Skąd się o tym dowiedziałeś?
komentarz 6 grudnia 2017 przez Tomek Sochacki Ekspert (227,510 p.)
Szczerze mówiąc to z notepad++ rzadko korzystam,  do programowania używam IDE. W Twoim przypadku pierwsze co mi przyszło do głowy to wyrażenie regularne i po prostu sprawdziłem, czy notepda++ je obsługuje, okazało się, że tak i voila :)

Nie szukaj książek o edytorach. Jeśli chcesz programować to proponuję jakiś IDE, nawet jest dzisiejszy wątek na ten temat.

A same wyrażenia regularne to w ogóle oddzielny temat, w pewnym sensie niezależny od języków programowania (w zasadzie składnia jest bardzo podobna w większości, różnice są jedynie w tzw. flagach i trybach oraz w większej i mniejszej liczbie obsługiwanych elementów jak cofnięcia, złączenia, różnicowania itp.).
komentarz 6 grudnia 2017 przez Grzegorz Mikina Dyskutant (8,060 p.)
Dał bym Ci kolego drugi raz pomógł, jak była by tylko taka możliwość. Więcej takich ludzi jak Ty a świat będzie dużo lepszym miejscem, niż jest.
komentarz 6 grudnia 2017 przez Tomek Sochacki Ekspert (227,510 p.)
:) Spoko. Na tym forum jest sporo osób chętnie pomagających, a przy okazji poznałem możliwości notepad++, kto wie kiedy się przydadzą :)
komentarz 6 grudnia 2017 przez Grzegorz Mikina Dyskutant (8,060 p.)
^ początek wzorca ^za zapałka, zadra, zapłon, zarazek kazanie, poza, bazar
$ koniec wzorca az$
^.arka$
uraz, pokaz
barka, warka
azymut, pokazy
parkan
. dowolny pojedynczy znak .an.a panda, Wanda, panna, kania rana, konia
[...] dowolny z wymienionych znaków; możemy podawać kolejne znaki lub wpisywać zakres - na przykład [a-z] oznacza wszystkie małe litery. Wymieniając specjale znaki z końca tej tabeli nie musimy poprzedzać znakiem \ [a-z]an[nd]a
[a-z][a-zA-Z0-9.-][pus]
pana, panda, wanna
pas, mAs, p2p, m3u, b-s, z.u
Wanda, kania
Bas, bal, balu, mp3
[^...] dowolny z niewymienionych znaków kre[^st] krew, krem kres, kret
| dowolny z rozdzielonych znakiem ciągów [nz]a|pod|przed
trzynasty|13-ty|13
na, za, pod, przed
trzynasty, 13-ty, 13
 
(...) zawężenie zasięgu g(ż|rz)eg(ż|rz)(u|ó)łka
(ósmy|8-my|8)(maj|maja)
gżegżółka, gżegrzółka, gżegrzułka, grzegrzułka
ósmy maja, 8-my maj, 8 maja
 
? zero lub jeden poprzedzający znak lub element; elementem może być na przykład wyrażenie umieszczone wewnątrz nawiasów (...) ro?uter
(ósmy|8(-my)?)maja?
router, ruter
ósmy maja, ósmy maj, 8-mymaja, 8-my maj, 8 maja, 8 maj
 
+ jeden lub więcej poprzedzających znaków lub elementów; elementem może być na przykład wyrażenie umieszczone wewnątrz nawiasów (...) [0-9]+[abc]
pan+a
(tam)+
10a, 1b, 003c, 42334b
pana, panna, pannnna
tam, tamtam, tamtamtam
a, b, c, z, 14, 03, 12d, 1231z
paa, panda, ta, tamta, mat
* zero lub więcej poprzedzających znaków lub elementów; elementem może być na przykład wyrażenie umieszczone wewnątrz nawiasów (...) [0-9]*[abc]
pora*n*a*
10a, 1b, 003c, 42334b, a, b, c
por, poa, poranna, poraannnaa, pornnna
k, 2335, porada, panna
{4} dokładnie 4 poprzedzające znaki lub elementy [0-9]{4} 8765, 8273, 2635 12345, 234, 2123456
{4,} 4 lub więcej poprzedzających znaków lub elementów [ah]{4,} haha, haaaaahaha, ahaaa haa, ha, hehe, aha
{2,4} od 2 do 4 poprzedzających znaków lub elementów p.{2,4}a piana, pola, polana psa, poranna
\. znak kropki [0-9]{,3}\.[0-9]{,3}\.[0-9]{,3} 128.0.0.2 128-0-0-2
\* znak * \*.+ *nic nic*, nic
\/ znak / ^\/\/$ //  
\? znak ? ^.+\?$ Czy to jest kot? Czy to jest kot
\: znak : ^.+\:$ Oto one: :nic
\. znak . \.+ ......  
\^ znak ^ .*\^ To jest ^ To jest &
\+ znak + [0-9]+\+[0-9]+ 928374+29832 23873-32787
238738278
\\ znak \ c\:\\ c:\  
\= znak = [0-9]+\+[0-9]+\=[0-9]+ 11+12=23 11+12+23
\| znak | x \|\| y x || y  
komentarz 6 grudnia 2017 przez Tomek Sochacki Ekspert (227,510 p.)
Hmm... powiedzmy, że na początek przygody z regexp może być :) Są tu pewnie nieścisłości i braki ale nie chcę Ci zbyt mocno komplikować.

Jedyne co to nawiasy okrągłe: "( ... )" to nie do końca "zawężenie zakresu" (nie wiem skąd niektórzy biorą te nazwy...:) Można to rozumieć w pewnym sensie jako podwzorzec, czyli dodatkowy, wewnętrzny wzorzec regexp, który może zostać zapamiętany lub nie (grupy bez zapamiętania tworzy się: "(?: ... )").

Nie wiem w jakim języku programowania działasz, ale jeśli w JS to na moim blogu poruszałem parę tematów związanych z wyrażeniami regularnymi z przykładami (poradnik.drogimex.pl).

Ale na pewno polecam poznać chociaż podstawy regexp, wbrew pozorom często się to przydaje.
komentarz 6 grudnia 2017 przez Grzegorz Mikina Dyskutant (8,060 p.)
Jak widać na dzisiejszym przykładzie na pewno niedługo będę wiedzieć coś na ten temat. Pozdrawiam, jeszcze raz dzięki za pomoc.

Podobne pytania

0 głosów
3 odpowiedzi 944 wizyt
0 głosów
2 odpowiedzi 5,886 wizyt
pytanie zadane 22 lipca 2017 w Systemy operacyjne, programy przez Quasch Nowicjusz (160 p.)
0 głosów
4 odpowiedzi 4,003 wizyt
pytanie zadane 31 stycznia 2016 w Offtop przez Miki Bywalec (2,480 p.)

92,452 zapytań

141,262 odpowiedzi

319,085 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...