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

Wyrażenia regularne

Object Storage Arubacloud
0 głosów
365 wizyt
pytanie zadane 3 października 2020 w Inne języki przez apofix Początkujący (270 p.)

Interesuje mnie jak użyć wyrażenia regularnego by w tekście wyciąć pierwszą linię do kropki niezależnie co po niej idzie.

weźmy np. taki fragment:

"Administracja w działach IT rządzi się swoimi prawami. Różne metody zatrudniania osób na stanowiska pracy w takich działach dobrze odzwierciedlają to, czym różnią się od siebie poszczególne stanowiska."

Szukałem w Internecie ale nic nie znalazłem. Wierzę że tu ktoś to objaśni.

Testuję wyrażenia na https://regexr.com/

4 odpowiedzi

+1 głos
odpowiedź 3 października 2020 przez marcin99b Szeryf (82,180 p.)
wybrane 3 października 2020 przez apofix
 
Najlepsza
^.*?\.

^ -> start linii
.* -> dowolny znak dowolną linie razy 
? występujące po .* -> sprawdzaj co jest dalej w regexie podczas analizy tekstu
\. -> dosłownie kropka, jest na końcu więc tekst będzie sie kończyć kropką

w efekcie masz
-szukaj od początku linii
-weź wszystkie znaki
-ale sprawdzaj czy to co jest za "weź wszystkie znaki" zgadza sie z aktualnym tekstem

oczywiście w bardzo dużym uproszczeniu

dodatkowo zamiast regexr polecam strone regex101
wizualnie obie stoją na podobnym poziomie, obie mają dokumentacje
na regexr bardzo dużo razy dochodziłem do ograniczeń z ustawianiem flag + często jakiś regex mi nie działał mimo że powinien
w przypadku regex101 zawsze wszystko było tak jak powinno być 

regex101 obsługuje większą ilość flag, większą ilość implementacji/wersji regexa i ma debugger pomagający w optymalizacji, którego w regexr nie zauważyłem 

komentarz 3 października 2020 przez apofix Początkujący (270 p.)
edycja 3 października 2020 przez apofix
Wielkie dzięki, uczę się od tygodnia i kombinowałem, szukałem a tu na polskim Forum fachowa odpowiedź.

A mam jeszcze pytanko a jak ograniczyć długość pierwszego zdania do np. 200 znaków?
komentarz 3 października 2020 przez marcin99b Szeryf (82,180 p.)

tutaj masz myśle że dość dobry poradnik
https://www.oreilly.com/library/view/regular-expressions-cookbook/9780596802837/ch04s09.html

w dużym skrócie masz {} w których określasz przedział wymaganej długości, jeśli chcesz wpisać na sztywno
jeśli nie wiesz jaka będzie długość * znaczy od 0 do nieskończoności a + znaczy od 1 do nieskończoności

przykładowo
.{2,8}
.+
.*

dodatkowo niezbędny temat w wielu przypadkach to grupy -> dużo prościej wyciągać z nich dane
np 

^(?<FirstSentence>.*)?\.

i wtedy wyciągasz z regexa jedynie wartość dla tej grupy 

dodatkowo użyteczne są lookahead i lookbehind w wersji pozytywnej i negatywnej -> do upewniania sie czy przed/za tekstem coś występuje w chwili analizowania go, zamiast dopiero po przeanalizowaniu (tak jak to sie dzieje domyślnie)

wydaje sie że tego jest dużo, ale wykorzystując regexy w praktyce większość użytecznych mechanizmów spokojnie można opanować w 3 dni, jak ktoś sie postara to może nawet dzień

komentarz 3 października 2020 przez marcin99b Szeryf (82,180 p.)
A, no i też moim zdaniem grupy dodają dużo czytelności do regexa
Bez nich regex wygląda często jak ciąg losowo wpisanych znaków
A z nimi masz jasno opisane co gdzie wyciągasz

A dodatkowo w podglądzie masz wszystko jasno oznaczone + w kodzie jesteś w stanie w prosty sposób wyciągać konkretne wartości
komentarz 4 października 2020 przez apofix Początkujący (270 p.)

@marcin99b,

Fajnie dzięki za informacje. Pouczę się GRUP w Regexie dobry link do nauki. Jakoś nie trafiłem na niego. 

komentarz 4 października 2020 przez marcin99b Szeryf (82,180 p.)
dlaczego "GRUP" dużymi literami?
to nie jest żadna nazwa własna ani skrót
komentarz 5 października 2020 przez apofix Początkujący (270 p.)
:) Chciałem zaakcentować temat.
0 głosów
odpowiedź 3 października 2020 przez ScriptyChris Mędrzec (190,190 p.)

https://stackoverflow.com/a/44314104/4983840

Demo: https://regex101.com/r/HpfZKd/1

Ewentualnie - jeśli tego RegExpa chcesz użyć w konkretnym języku programowania - możesz wyszukać indeks pierwszej kropki w tekście i wyciąć tekst do tego miejsca. Na przykładzie JavaScriptu:

var text = "Administracja w działach IT rządzi się swoimi prawami. Różne metody zatrudniania osób na stanowiska pracy w takich działach dobrze odzwierciedlają to, czym różnią się od siebie poszczególne stanowiska.";
var withoutFirstSentence = text.slice(text.indexOf('.') + 1).trim();

console.log(withoutFirstSentence); // Różne metody zatrudniania osób na stanowiska pracy w takich działach dobrze odzwierciedlają to, czym różnią się od siebie poszczególne stanowiska.

 

0 głosów
odpowiedź 3 października 2020 przez tkz Nałogowiec (42,000 p.)
import re
txt = "Administracja w działach IT rządzi się swoimi prawami. Różne metody zatrudniania osób na stanowiska pracy w takich działach dobrze odzwierciedlają to, czym różnią się od siebie poszczególne stanowiska."
x = re.split("^([^.]+)", txt)
print(x)

 

0 głosów
odpowiedź 3 października 2020 przez VBService Ekspert (253,300 p.)
edycja 3 października 2020 przez VBService
let text = "Testowe pierwsze zdanie. Testowe drugie zdanie. Testowe trzecie zdanie. Testowe czwarte zdanie.";

text = text.split('.').slice(1).join('.').trim();
console.log(text);

 

Podobne pytania

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

92,568 zapytań

141,420 odpowiedzi

319,620 komentarzy

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

...