Czy da się uprościć tą formułę
-
- Posty: 92
- Rejestracja: wt paź 04, 2022 5:48 pm
Czy da się uprościć tą formułę
=REGEX(REGEX(D1;"^[:space:]*(yt|YT|Yt|yT)[:digit:]+[:space:]*$";REGEX(D1;"^[:space:]*(yt|YT|Yt|yT)";"YT-"));"[:space:]+";"")
Formuła ma za zadanie zmieniać kody typu YT0501 na YT-0501, spacje początkowe, spacje końcowe jak i wielkość liter nie ma znaczenia. Inne kody np PTYT100 mają pozotać nie zmienione.
Formuła ma za zadanie zmieniać kody typu YT0501 na YT-0501, spacje początkowe, spacje końcowe jak i wielkość liter nie ma znaczenia. Inne kody np PTYT100 mają pozotać nie zmienione.
7.5.6.2 (X86_64)
Re: Czy da się uprościć tą formułę
W jakim kontekście ma ona działać. Komórka zawiera wyłącznie kody, komórka zawiera teksty, wśród których są te kody, Komórka zawiera wiele kodów i tylko te zaczynające się od YT mają być zmienione.
AOO 4.1.15, LO 24.8.2 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Re: Czy da się uprościć tą formułę
Tak najbardziej ogólnie, to znaczy może wystąpić ciąg znaków przed i po twoim kodzie, zadziała taka formuła:
Kod: Zaznacz cały
=REGEX(A1;"(.*)\b[Yy][Tt](\d+.*)";"$1YT-$2")
AOO 4.1.15, LO 24.8.2 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
-
- Posty: 92
- Rejestracja: wt paź 04, 2022 5:48 pm
Re: Czy da się uprościć tą formułę
Co oznacza $1YT-$2?
Dokładniej co oznacza $1ciąg.znaków$2
Dokładniej co oznacza $1ciąg.znaków$2
7.5.6.2 (X86_64)
Re: Czy da się uprościć tą formułę
https://help.libreoffice.org/latest/pl/ ... egexp.html
https://help.libreoffice.org/latest/pl/ ... 00001.html
https://help.libreoffice.org/latest/pl/ ... 00001.html
JJ
LO (24.2|7.6) ∙ Python (3.12|3.11|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
LO (24.2|7.6) ∙ Python (3.12|3.11|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Re: Czy da się uprościć tą formułę
Te symbole mają takie samo znaczenie jak w operacji "Znajdź i zamień" z wykorzystaniem wyrażeń regularnych. Opisałem to w tym opracowaniu: https://yestok.pl/ooo/y16.php#p8b w części, w której piszę o roli nawiasów okrągłych.
AOO 4.1.15, LO 24.8.2 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Re: Czy da się uprościć tą formułę
To jednak i tak nie jest najprostsze wyrażenie. Za wyjątkiem zapisu \d, który oznacza dowolną cyfrę i nie został wymieniony w liście symboli regularnych podanych w helpie, pozostałe są w tym helpie wymienione i można poczytać o ich znaczeniu..
Tych symboli jest jednak więcej i znając je można uprościć twoją formułę do następującej postaci:
Przy tym zapisie nawiasy okrągłe nie oznaczają grup przechwytywanych, czyli takich, które można przywołać w innym miejscu.
Pierwszy zapis "(?wi)" mówi, że wyszukiwane będą całe słowa (litera "w") oraz ignorowana będzie wielkość liter (litera "i"). Przez słowa rozumie się ciągi literowocyfrowe ograniczone z obu stron jednym ze znaków: spacja, znakami interpunkcji (kropka, wykrzyknik, myślnik, przecinek, itd), tabulatorami.
Drugi zapis (?:yt) oznacza, że w ciągu tekstowym ma zostać znaleziona grupa liter "yt" będąca jednocześnie początkiem słowa i ewentualna zamiana dotyczy tylko tej grupy. Inne fragmenty tekstu źródłowego pozostają nienaruszone.
No a dalej, że mają zostać zamienione na "YT-".
Tych symboli jest jednak więcej i znając je można uprościć twoją formułę do następującej postaci:
Kod: Zaznacz cały
=REGEX(A1;"(?wi)(?:yt)";"YT-")
Pierwszy zapis "(?wi)" mówi, że wyszukiwane będą całe słowa (litera "w") oraz ignorowana będzie wielkość liter (litera "i"). Przez słowa rozumie się ciągi literowocyfrowe ograniczone z obu stron jednym ze znaków: spacja, znakami interpunkcji (kropka, wykrzyknik, myślnik, przecinek, itd), tabulatorami.
Drugi zapis (?:yt) oznacza, że w ciągu tekstowym ma zostać znaleziona grupa liter "yt" będąca jednocześnie początkiem słowa i ewentualna zamiana dotyczy tylko tej grupy. Inne fragmenty tekstu źródłowego pozostają nienaruszone.
No a dalej, że mają zostać zamienione na "YT-".
AOO 4.1.15, LO 24.8.2 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
-
- Posty: 92
- Rejestracja: wt paź 04, 2022 5:48 pm
Re: Czy da się uprościć tą formułę
A czy da się w regex zastąpić kilka grup wyrażeń osobnymi zastąpieniami np.Jermor pisze: ↑pt cze 16, 2023 2:27 pm To jednak i tak nie jest najprostsze wyrażenie. Za wyjątkiem zapisu \d, który oznacza dowolną cyfrę i nie został wymieniony w liście symboli regularnych podanych w helpie, pozostałe są w tym helpie wymienione i można poczytać o ich znaczeniu..
Tych symboli jest jednak więcej i znając je można uprościć twoją formułę do następującej postaci:Przy tym zapisie nawiasy okrągłe nie oznaczają grup przechwytywanych, czyli takich, które można przywołać w innym miejscu.Kod: Zaznacz cały
=REGEX(A1;"(?wi)(?:yt)";"YT-")
Pierwszy zapis "(?wi)" mówi, że wyszukiwane będą całe słowa (litera "w") oraz ignorowana będzie wielkość liter (litera "i"). Przez słowa rozumie się ciągi literowocyfrowe ograniczone z obu stron jednym ze znaków: spacja, znakami interpunkcji (kropka, wykrzyknik, myślnik, przecinek, itd), tabulatorami.
Drugi zapis (?:yt) oznacza, że w ciągu tekstowym ma zostać znaleziona grupa liter "yt" będąca jednocześnie początkiem słowa i ewentualna zamiana dotyczy tylko tej grupy. Inne fragmenty tekstu źródłowego pozostają nienaruszone.
No a dalej, że mają zostać zamienione na "YT-".
"(^\s*[Yy][Tt]\d+)(\s*$)" ma zostać zastąpione na (YT-)() tj. na Symbole YT- oraz znak pusty
7.5.6.2 (X86_64)
Re: Czy da się uprościć tą formułę
Nie bardzo rozumiem to pytanie.
Dlatego napisałem ci już wcześniej, że trzeba znać kontekst żądanego działania.
Po pierwsze nie ma czegoś takiego jak znak pusty. Używamy tego terminu, żeby np. zbadać czy komórka coś zawiera. Wpisując dwa cudzysłowy (A1="") mówimy, że wstawiamy znak pusty, podczas gdy w rzeczywistości niczego nie wstawiamy, sprawdzamy tylko, czy coś jest w A1.
Po drugie nie wiem, co ty robisz z tymi spacjami, bo z wzorca wynika, że szukasz ciągu, którego pierwszym znakiem może być tylko spacja i dowolna liczba dalszych spacji, po których ma się pojawić układ liter YT z dowolną (lecz przynajmniej jedną) liczbą cyfr. Po cyfrach może się pojawić dowolna liczba spacji. Nawiasem mówiąc, ten wzorzec sprawi, że cały dotychczasowy tekst zostanie zastąpiony ciągiem "YT-".
Po trzecie nie wiadomo, o jakie grupy ci chodzi. Może, zamiast prezentować wyrażenie regularne, pokażesz faktyczny tekst, może być udawany, byle odzwierciedlał istotę zagadnienia, co ważne w sposób ogólny, a nie dla jakiegoś jednostkowego przypadku.
Po czwarte, co mi się nasuwa na podstawie tego, co widzę, chodzi ci prawdopodobnie o pozbycie się spacji, poprzedzających i końcowych, ale do tego lepiej użyć zwykłej funkcji Calc, o — niestety nieszczęśliwej — nazwie, USUŃ.ZBĘDNE.ODSTĘPY(). Usuwa ona z ciągu tekstowego wszystkie spacje początkowe i końcowe a wewnątrz ciągu, wszystkie napotkane spacje wielokrotne zamienia na pojedynczą.
Dlatego napisałem ci już wcześniej, że trzeba znać kontekst żądanego działania.
Po pierwsze nie ma czegoś takiego jak znak pusty. Używamy tego terminu, żeby np. zbadać czy komórka coś zawiera. Wpisując dwa cudzysłowy (A1="") mówimy, że wstawiamy znak pusty, podczas gdy w rzeczywistości niczego nie wstawiamy, sprawdzamy tylko, czy coś jest w A1.
Po drugie nie wiem, co ty robisz z tymi spacjami, bo z wzorca wynika, że szukasz ciągu, którego pierwszym znakiem może być tylko spacja i dowolna liczba dalszych spacji, po których ma się pojawić układ liter YT z dowolną (lecz przynajmniej jedną) liczbą cyfr. Po cyfrach może się pojawić dowolna liczba spacji. Nawiasem mówiąc, ten wzorzec sprawi, że cały dotychczasowy tekst zostanie zastąpiony ciągiem "YT-".
Po trzecie nie wiadomo, o jakie grupy ci chodzi. Może, zamiast prezentować wyrażenie regularne, pokażesz faktyczny tekst, może być udawany, byle odzwierciedlał istotę zagadnienia, co ważne w sposób ogólny, a nie dla jakiegoś jednostkowego przypadku.
Po czwarte, co mi się nasuwa na podstawie tego, co widzę, chodzi ci prawdopodobnie o pozbycie się spacji, poprzedzających i końcowych, ale do tego lepiej użyć zwykłej funkcji Calc, o — niestety nieszczęśliwej — nazwie, USUŃ.ZBĘDNE.ODSTĘPY(). Usuwa ona z ciągu tekstowego wszystkie spacje początkowe i końcowe a wewnątrz ciągu, wszystkie napotkane spacje wielokrotne zamienia na pojedynczą.
AOO 4.1.15, LO 24.8.2 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
-
- Posty: 92
- Rejestracja: wt paź 04, 2022 5:48 pm
Re: Czy da się uprościć tą formułę
Przepraszam, że dopiero teraz odpisuję. Pytanie miało cel edukacyjny ponieważ pierwszy regex (w sumie to jest "the" pierwszy ponieważ nigdy wżyciu nie pisałem przed nim regexa)Jermor pisze: ↑pt cze 16, 2023 4:58 pm Nie bardzo rozumiem to pytanie.
Dlatego napisałem ci już wcześniej, że trzeba znać kontekst żądanego działania.
Po pierwsze nie ma czegoś takiego jak znak pusty. Używamy tego terminu, żeby np. zbadać czy komórka coś zawiera. Wpisując dwa cudzysłowy (A1="") mówimy, że wstawiamy znak pusty, podczas gdy w rzeczywistości niczego nie wstawiamy, sprawdzamy tylko, czy coś jest w A1.
Po drugie nie wiem, co ty robisz z tymi spacjami, bo z wzorca wynika, że szukasz ciągu, którego pierwszym znakiem może być tylko spacja i dowolna liczba dalszych spacji, po których ma się pojawić układ liter YT z dowolną (lecz przynajmniej jedną) liczbą cyfr. Po cyfrach może się pojawić dowolna liczba spacji. Nawiasem mówiąc, ten wzorzec sprawi, że cały dotychczasowy tekst zostanie zastąpiony ciągiem "YT-".
Po trzecie nie wiadomo, o jakie grupy ci chodzi. Może, zamiast prezentować wyrażenie regularne, pokażesz faktyczny tekst, może być udawany, byle odzwierciedlał istotę zagadnienia, co ważne w sposób ogólny, a nie dla jakiegoś jednostkowego przypadku.
Po czwarte, co mi się nasuwa na podstawie tego, co widzę, chodzi ci prawdopodobnie o pozbycie się spacji, poprzedzających i końcowych, ale do tego lepiej użyć zwykłej funkcji Calc, o — niestety nieszczęśliwej — nazwie, USUŃ.ZBĘDNE.ODSTĘPY(). Usuwa ona z ciągu tekstowego wszystkie spacje początkowe i końcowe a wewnątrz ciągu, wszystkie napotkane spacje wielokrotne zamienia na pojedynczą.
tj.=REGEX(REGEX(D1;"^[:space:]*(yt|YT|Yt|yT)[:digit:]+[:space:]*$";REGEX(D1;"^[:space:]*(yt|YT|Yt|yT)";"YT-"));"[:space:]+";"")
wykonał zadanie, jednak jest on długi i zagnieżdża funkcje.
Po kilku próbach napisałem zadowalający minie regex który wygląda tak .
=REGEX(D1;"^\s*[Yy][Tt](\d+)\s*$";"YT-$1")
Przedtem napisałem również regex z wykorzystaniem funkcji USUŃ.ZBĘDNE.ODSTĘPY
=REGEX(D1;"^\s*[Yy][Tt]\d+\s*$";USUŃ.ZBĘDNE.ODSTĘPY(REGEX(D1;"[Yy][Tt]";"YT-")))
Regex "=REGEX(A1;"(?wi)(?:yt)";"YT-")" zamienia Kod YT-cyfry na YT--cyfry [dwa myślniki ], taki kod nie byłby potem wyszukany przez wyszukaj.pionowo
[przy wyszukaj.pionowo można też wkleić duplikaty kodów pod spód przeszukiwanej tabeli a potem ctrl+h usunąć myślnik, tak też początkowo zrobiłem jednak ma to swoje wady ]
" Nawiasem mówiąc, ten wzorzec sprawi, że cały dotychczasowy tekst zostanie zastąpiony ciągiem "YT-"."
Tak tu źle postawiłem nawias zamiast (^\s*[Yy][Tt]\d+)(\s*$) miało być (^\s*[Yy][Tt])\d+(\s*$)
w tym przypadku jednak widzę że wystarczy odwrócić nawiasy ^\s*[Yy][Tt](\d+)\s*$
by otrzymać zastąpienie : cośtamjeden$1cośtamdwa.
7.5.6.2 (X86_64)
Re: Czy da się uprościć tą formułę
Na swoim małym ekranie nie zauważyłem tego, że powstają dwa myślniki i nie zauważyłem błędu. Powodem jest oczywiście niepoprawne wyrażenie regularne. Powinno wyglądać to tak:
Kod: Zaznacz cały
=REGEX(A1;"(?wi)(?:yt-?)";"YT-")
AOO 4.1.15, LO 24.8.2 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.