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

Wyrażenia regularne usunięcie jednego słowa różniącego się od innych końcówką

Object Storage Arubacloud
0 głosów
337 wizyt
pytanie zadane 10 stycznia 2018 w Inne języki przez Grzegorz Mikina Dyskutant (8,060 p.)
zmienione kategorie 10 stycznia 2018 przez draghan
Witam, jestem niedoświadczony z regex i nie wiem jak określić słowo z małej litery wystepującego na końcu i nie wiem jak jest określić. Jest podwójna nazwa miejscowości... i powiat (pisany z małej litery i zawsze kończy się na (..ki)). Potrzebuje usunąć cały wyraz w całym dokumencie powtarza się dużo razy.
komentarz 10 stycznia 2018 przez draghan VIP (106,230 p.)
Niewiele zrozumiałem z Twojego pytania, Grzegorzu.
komentarz 10 stycznia 2018 przez Grzegorz Mikina Dyskutant (8,060 p.)
Są trzy słowa.... Bochnia Bochnia bocheński, jak usunąć 2 i 3 słowo a zostawić tylko pierwsze?
komentarz 10 stycznia 2018 przez Tomek Sochacki Ekspert (227,510 p.)

@Grzegorz Mikina, daj kilka przykladow to pomozemy.

komentarz 10 stycznia 2018 przez draghan VIP (106,230 p.)
W jakim standardzie regexpa?
komentarz 10 stycznia 2018 przez Tomek Sochacki Ekspert (227,510 p.)
  1. Dokładnie jakie dane, jak są oddzielane od siebie (nowe wiersze?), podaj kilka przykładów, w sensie np. fragment zbioru (np. pliku) i powiedz co chcesz osiągnąć. Z tego jednego przykładu za mało wynika, np. nie wiemy jakie są separatory itp.
  2. gdzie użyjesz tego regexp, w jakimś języku programowania, edytorze itp.? Sam regexp będzie prawdopodobnie w większości taki sam, ale mogą wystąpić drobne różnice np. we flagach multiline itp. w zależności od środowiska
  3. napisz jak często będziesz robił takie modyfikacje, ile jest tych danych, czy priorytetem jest wydajność itp. Ponad to napisz co chcesz dalej robić z danymi, bo czasami jedną funkcją będzie można machnąć i obróbkę regexp i np. stworzenie tablicy zawierającej przetworzone dane itp.
komentarz 10 stycznia 2018 przez Grzegorz Mikina Dyskutant (8,060 p.)
Jest tabelka... chciałbym ją za pomocą REGEXPA wyczyścić z cyferek i innych dodatków i dochodzę do momentu gdzie mam coś takiego:

.      Radzyń Podlaski      Radzyń Podlaski                
.      Włodawa      Włodawa                
.      Janów Lubelski      Janów Lubelski

Chce to zamienić odrazu dla całego dokumentu w INSERT INTO lubelskie VALUE(null,(JANÓW LUBELSKI)," "," "," ");
komentarz 10 stycznia 2018 przez Grzegorz Mikina Dyskutant (8,060 p.)
Dodaje wiersze do localhosta. Używam edytora Notepad ++. :)
komentarz 10 stycznia 2018 przez Tomek Sochacki Ekspert (227,510 p.)

wyczyścić z cyferek i innych dodatków

co rozumiesz pod pojęciem inne dodatki? Jakieś konkretne znaki? Cyferki to rozumiem tylko np. 3, 5 itd. czy są też może np. "3.5", "3,5" itp.?

Te dane co podałeś to masz w taki sposób?:

Radzyń Podlaski      Radzyń Podlaski                /n
Włodawa      Włodawa                /n
Janów Lubelski      Janów Lubelski

? Chodzmi mi czy są na końcach wierszy znaki podziału, np. /n itp.?

Rozumiem, że z 

"Radzyń Podlaski      Radzyń Podlaski                /n"

chciałbyś uzyskać:

"Radzyń Podlaski" tak?

Notepad++ ma dość dobre wsparcie regexp więc pewnie da się to machnąć, tylko musimy dokładnie ustalić co mamy i co ma być, żeby nie bawić się w tysiąc regexp różnych i próbkować...

komentarz 10 stycznia 2018 przez Grzegorz Mikina Dyskutant (8,060 p.)
Początek wygląda tak:

Aleksandrów Kujawski Aleksandrów Kujawski    aleksandrowski    7,23    12,476    1726
Barcin Barcin    żniński    3,70    7,714    2085
Brodnica Brodnica    brodnicki    23,15    28,574    1234
Brześć Kujawski Brześć Kujawski    włocławski    7,04    4,718    670
Bydgoszcz Bydgoszcz    Bydgoszcz[13]    175,98    358,614    2038
Chełmno Chełmno    chełmiński    13,56    20,573    1517
Chełmża Chełmża    toruński    7,84    14,965    1909

Za pomocą komendy \d usuwam wszystkie cyfry,

Zostaje coś takiego

Aleksandrów Kujawski Aleksandrów Kujawski    aleksandrowski    ,    ,    
Barcin Barcin    żniński    ,    ,    
Brodnica Brodnica    brodnicki    ,    ,    
Brześć Kujawski Brześć Kujawski    włocławski    ,    ,    
Bydgoszcz Bydgoszcz    Bydgoszcz[]    ,    ,    
Chełmno Chełmno    chełmiński    ,    ,    
Chełmża Chełmża    toruński    ,    ,   

Usuwam "," za pomocą zamień , na nic

Bo jak dam \s to powstaje coś takiego

insertintolubelskievalueAleksandrówKujawskiAleksandrówKujawskialeksandrowski,,BarcinBarcinżniński,,BrodnicaBrodnicabrodnicki,,BrześćKujawskiBrześćKujawskiwłocławski,,BydgoszczBydgoszczBydgoszcz[],,ChełmnoChełmnochełmiński,,ChełmżaChełmżato

Więc mam coś takiego
Aleksandrów Kujawski Aleksandrów Kujawski    aleksandrowski     
Barcin Barcin    żniński   
Brodnica Brodnica    brodnicki  

Chciałbym tylko :
Aleksandrów Kujawski

Barcin

Brodnica
komentarz 10 stycznia 2018 przez Grzegorz Mikina Dyskutant (8,060 p.)
Macie jakiś pomysł jak to uprościć?

1 odpowiedź

0 głosów
odpowiedź 10 stycznia 2018 przez Tomek Sochacki Ekspert (227,510 p.)
wybrane 11 stycznia 2018 przez Grzegorz Mikina
 
Najlepsza

Tak na szybko:

//Dane wejściowe:
Aleksandrów Kujawski Aleksandrów Kujawski    aleksandrowski    7,23    12,476    1726
Aleksandrów-Kujawski Aleksandrów-Kujawski    aleksandrowski    7,23    12,476    1726
Barcin Barcin    żniński    3,70    7,714    2085
Brodnica Brodnica    brodnicki    23,15    28,574    1234
Brześć Kujawski Brześć Kujawski    włocławski    7,04    4,718    670
Bydgoszcz Bydgoszcz    Bydgoszcz[13]    175,98    358,614    2038
Chełmno Chełmno    chełmiński    13,56    20,573    1517
Chełmża Chełmża    toruński    7,84    14,965    1909

//Wzorzec regexp:
Szukany tekst: ([a-ząęśżźćńłó\s-]+)\1.*
Zamień na: \1

//Efekt:
Aleksandrów Kujawski 
Aleksandrów-Kujawski 
Barcin 
Brodnica 
Brześć Kujawski 
Bydgoszcz 
Chełmno 
Chełmża 

Działa to na tych danych co podałeś + zauważ, że uwzględniłem także, że nazwa może mieć w środku myślnik, bo niektóre miasta mogą tak być zapisane. Zakładam jednocześnie, że zawsze występuje powtórzenie nazwy miasta (i jest ono od razu po pierwszej nazwie) + mogą być jakieś dalsze dodatkowe znaki w wierszu i je wszystkie usuwamy (nie interesuje nas już co tam jest).

Zauważ też, że zostają na końcu spacje, aby je też usunąć proponuję oblecieć na koniec drugim regexp:

Szukany tekst: \s+$
Zamień na: (puste)

W ten sposób dopasuje wszystkie spacji na końcu wierszy i je usunie.

Nie jest to może najlepsza postać takiego wzorca ale nie mam w tej chwili czasu żeby bardziej do tego usiąść. Daj znać czy ten wzorzec działa poprawnie, a jeśli nie to daj dane, które obrabia błędnie. A i pamiętaj, że działa on dobrze na miastach zawierających w nazwie litery łacińskie a-z oraz polskie znaki diaktryczne plus białe znaki i myślniki. Jeśli obrabiasz też inne nazwy zagraniczne to daj znać bo to będzie głębszy problem.

Jeśli wzorzec spełni oczekiwania to w razie zainteresowania chętnie wyjaśnię z czego się składa.

Pozdrawiam

Podobne pytania

0 głosów
3 odpowiedzi 530 wizyt
0 głosów
0 odpowiedzi 126 wizyt
0 głosów
1 odpowiedź 387 wizyt
pytanie zadane 5 października 2020 w Inne języki przez apofix Początkujący (270 p.)

92,550 zapytań

141,393 odpowiedzi

319,522 komentarzy

61,935 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy 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!

...