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

Wyrażenia regularne zostawianie tylko pierwszego słowa po lewej

Object Storage Arubacloud
0 głosów
530 wizyt
pytanie zadane 12 stycznia 2018 w C i C++ przez Grzegorz Mikina Dyskutant (8,060 p.)
Witam, czy istnieje jakiś prosty wzorzec, który zostawi mi tylko pierwsze słowo nie zależnie od tego czy sa po prawej jakieś cyfry czy nie ma? Dopasuje w pętli tak żeby po lewej było tylko najważniejsze słowo lub dwa, gdyż są to nazwy miast i mogą być nazwy dwuczłonowe np Aleksandrów Kujawski. zazwyczaj odstępy między nazwą dwuczłonową są większe niż jeden znak białty(czyt. SPACJA). Jak cyfry usunąć wiem, jak usunąc kropki wiem, nie wiem niestety co wpisać żeby program wiedział, że sprawa dotyczy tylko pierwszego słowa od lewej strony. Z góry dziękuje za podpowiedzi.:)
komentarz 18 stycznia 2018 przez mokrowski Mędrzec (155,460 p.)
Podaj kilka reprezentatywnych przykładów wpisu i efekt jaki chcesz uzyskać. Np. tak:

Aleksandrów Kujawski123155     -> Aleksandrów Kujawski

Warszawa 3121                        -> Warszawa

 

Zadanie wydaje się dość proste :-)

3 odpowiedzi

0 głosów
odpowiedź 18 stycznia 2018 przez mokrowski Mędrzec (155,460 p.)
wybrane 18 stycznia 2018 przez Grzegorz Mikina
 
Najlepsza
#include <iostream>
#include <regex>
#include <string>
#include <vector>

int main() {
    std::locale::global(std::locale("pl_PL.UTF-8"));
    std::vector<std::string> data = {
        "Aleksandrów Kujawski33443", "Ślepe  Kiszki;6455",
        "Koluszki!!!;s", "Myszate    Worki&&&&", "!$141923" };

    std::regex re(R"!(^([[:upper:]][[:alpha:]]+)( +[[:upper:]][[:alpha:]]+)?.*$)!"
            , std::regex_constants::extended);
    std::smatch msg_match;

    for(const auto& msg: data) {
        std::cout << '|' << msg << "| -> |";
        if(std::regex_match(msg, msg_match, re)) {
            std::cout << msg_match[1].str();
            // Ew. 2 człon nazwy... 
            //    << (msg_match.size() > 2 ? msg_match[2].str(): "");
        }
        std::cout << "|\n";
    }
}

 

komentarz 18 stycznia 2018 przez Grzegorz Mikina Dyskutant (8,060 p.)
Dobrze a w samym notepadzie( Nie dla C++) :)?
komentarz 18 stycznia 2018 przez mokrowski Mędrzec (155,460 p.)
Mhm.. a jak otagowałeś pytanie? Jest tam notepad?
komentarz 18 stycznia 2018 przez Grzegorz Mikina Dyskutant (8,060 p.)
No tak, masz racje nie dałem tagu do pytania, ale chciałbym tez wiedzieć jak to w samym Notepadzie zrobić.
komentarz 18 stycznia 2018 przez Grzegorz Mikina Dyskutant (8,060 p.)
Dziękuje za dodanie taga i przepraszam.
+1 głos
odpowiedź 13 stycznia 2018 przez j23 Mędrzec (194,920 p.)

(...) żeby program wiedział, że sprawa dotyczy tylko pierwszego słowa od lewej strony.

W regexach początek tekstu to ^.

komentarz 13 stycznia 2018 przez Grzegorz Mikina Dyskutant (8,060 p.)
Można to zrobić też w pętli. Skrót klawiszowy citrl + shift + strzałka w prawo zaznacza całe słowo, jeżeli kliknę dwa razy na prawą strzałkę to zaznacza dwa słowa. Makro zapamiętuje że ma zaznaczyć skrótem całe słowo lub dwa i usuwam je, też jest jakiś sposób :)
komentarz 13 stycznia 2018 przez Grzegorz Mikina Dyskutant (8,060 p.)

^. ok, tylko jak mu powiesz że ma usunąć tylko pierwszy wyraz jak ma np 10 w linijce, nazwy dwuczłonowe, obce litery, -, obce ogonki itd? 

komentarz 13 stycznia 2018 przez j23 Mędrzec (194,920 p.)

^([^\s\d]+)   <-- o to Ci chodzi?

0 głosów
odpowiedź 13 stycznia 2018 przez obl Maniak (51,280 p.)

Nie wiem jak twoje dane są zapisane, czy wygląda to np. tak:

Nazwa Miasta;coś tam jeszcze;itd. itp

Musisz mieć w tekście jakiś znacznik, który mówi ci, że dana część wpisu dotyczy miasta, inna czegoś tam, inna jeszcze czegoś innego. Nie mając wycinka przykładowych danych nie da się odpowiedzieć na twoje pytanie. Jeżeli twoje dane są odseparowane tylko białymi znakami np. tak:

Nazwa Miasta coś tam jeszcze itd. itp

to niestety może być problem. Bo nie jesteś w stanie określić gdzie kończy się część zawierająca nazwę miasta a gdzie reszta. No chyba że dane są oddzielone tabulatorami a w tekście są tylko spacje.

komentarz 18 stycznia 2018 przez Grzegorz Mikina Dyskutant (8,060 p.)
Jak oznaczyć że początkiem wyrażenia jest tabulator i ma usunąć wszystko do końca wersu?

Podobne pytania

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

92,554 zapytań

141,399 odpowiedzi

319,535 komentarzy

61,938 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!

...