sexy69bis
(sexy69bis)
26 Wrzesień 2017 08:18
#1
przykładowe wyrazy:
asikowie
Asikowierzyn
askowie
Askowierzyn
sikowie
Sikowierzyn
skowie
Skowierzyn
ten wzór: (\b[a-z]+kowie) znajduje
wyrazy zaczynające się z małej litery i zawierające “kowie” w dowolnym miejscu
asikowie
askowie
sikowie
skowie
chciałbym wyszukać wyrazy zaczynające się z dużej litery i zawierające “kowie” w dowolnym miejscu
ten wzór: (\b[A-Z]+kowie) znajduje tylko
wyrazy zawierające “kowie” zaraz po pierwszej dużej literze
Skowierzyn
Jak powinien wyglądać wzór, aby znaleźć również pozostałe wyrazy
Askowierzyn
Sikowierzyn
Fizyda
(Fizyda)
26 Wrzesień 2017 08:48
#2
Nie w dowolnym miejscu, a na końcu i do tego tylko tuż po jednej literze. Przynajmniej tak masz zapisane w wyrażeniu, dlatego masz problem z szukaniem wyrazów zaczynających się od dużej litery. Jeśli chcesz wyrażenie które szuka wyraz zaczynający się od dużej litery (lub w drugim przypadku małej), a następnie w DOWOLNYM miejscu wyrazu jest kowie to wyrażenie będzie wyglądało mniej więcej tak, ale w środku nie mogą wystąpić wielkie litery:
(\b[a-z]+[a-z]*kowie[a-z]*)
Tutaj masz uwzględnione wszystkie możliwości dla wyrazów zaczynających się od małej litery (jest to warunek konieczny). Następnie mogą wystąpić jakieś małe litery, musi wystąpić ciąg “kowie” i po nim znów mogą wystąpić jakieś małe litery.
Edit:
Twoje wyrażenie które działa przez przypadek, działa tylko dlatego że wyrazy pisane z małej litery mają na końcu ciąg znaków “kowie”, a przed nim stoi jakaś mała literka. Dla wyrazu asikowie
Twoje wyrażenie dopasowuje się tylko do części ikowie
, jest mała litera, a po niej na końcu wyrazu “kowie”, więc pasuje. Równie dobrze mógłby to być taki ciąg znaków: “Ka12sikowie”
2 polubienia
sexy69bis
(sexy69bis)
26 Wrzesień 2017 09:08
#3
Dzięki za pomoc. Trochę to skomplikowane.
Fizyda:
Edit:
Twoje wyrażenie które działa przez przypadek, działa tylko dlatego że wyrazy pisane z małej litery mają na końcu ciąg znaków “kowie” , a przed nim stoi jakaś mała literka. Dla wyrazu asikowie Twoje wyrażenie dopasowuje się tylko do części ikowie, jest mała litera, a po niej na końcu wyrazu “kowie”, więc pasuje. Równie dobrze mógłby to być taki ciąg znaków: “Ka12sikowie”
to (\b[a-z]+kowie) znajduje również
asikowie cz
Nie znajduje jak robię podmianę w Notepad++ to zostawi “cz”.
https://regex101.com/r/ecP7cB/1
sexy69bis
(sexy69bis)
26 Wrzesień 2017 09:55
#5
(\b[A-z]+[A-z]kowie[A-z] )
to wyszukuje wyrazy zaczynające się na dużą i małą literę
prawidłowy wzór jest: (\b[A-Z]+[a-z]kowie[a-z] )
Jak końcówki nie są ważne i “zyn” może ucinać https://regex101.com/r/ecP7cB/2
sexy69bis
(sexy69bis)
26 Wrzesień 2017 10:22
#7
Działa, ale kiepsko wygląda, tylko część wyrazu.
Dobrze by było gdyby zaznaczone było tylko “kowie”
Fizyda
(Fizyda)
26 Wrzesień 2017 10:34
#8
Ja już się zgubiłem o co chodzi. Zgadując może o to: https://regex101.com/r/BSx4hJ/1 ?
sexy69bis
(sexy69bis)
26 Wrzesień 2017 10:45
#9
\b[A-Z]+[a-z](kowie)[a-z]
to wszystko jest to samo, nawiasy nic nie wnoszą.
(\b[A-Z]+[a-z]kowie[a-z] )
najprostszy jest wzór: i jest OK.
\b[A-Z]+[a-z]*kowie[a-z] *
szkoda, że nie można zaznaczyć tylko "kowie"
Askowie rzyniec
sexy69bis
(sexy69bis)
26 Wrzesień 2017 12:51
#10
a jaki będzie wzór, aby wyszukać wyrazy zaczynające się z dużej litery i kończące się na “kowie”
ten
\b[A-Z]*.kowie\b
wyszukuje oprócz
Alkowie
dodatkowo
akowie
sexy69bis
(sexy69bis)
26 Wrzesień 2017 13:10
#11
Już mam:
\b[A-Z]+[a-z]*(kowie)\b
Fizyda
(Fizyda)
26 Wrzesień 2017 13:17
#12
Wnoszą wnoszą, możesz potem użyć potem konkretnej grupy z wyrażenia do dalszej pracy.
sexy69bis
(sexy69bis)
26 Wrzesień 2017 13:20
#13
a możesz dać przykład z nawiasem, gdzie po usunięciu jego zmieni się poszukiwanie?
Fizyda
(Fizyda)
26 Wrzesień 2017 13:23
#14
Porównaj wyniki dopasowań dla teoretycznie takich samych wyrażeń:
https://regex101.com/r/BSx4hJ/1
https://regex101.com/r/BSx4hJ/3
EDIT:
W drugim przykładzie był błąd już poprawiłem.
sexy69bis
(sexy69bis)
26 Wrzesień 2017 13:35
#15
([A-Z]+[a-z]), faktycznie, po 2 literach jest “kowie” bez nawiasu ilość liter przed "kowie nie ma znaczenia"
Dzięki.
Fizyda
(Fizyda)
26 Wrzesień 2017 13:36
#16
Sprawdź jeszcze raz linki bo za pierwszym razem w drugim przykładzie zrobiłem błąd i chyba na tą wersje patrzysz.
sexy69bis
(sexy69bis)
26 Wrzesień 2017 13:54
#17
Teraz oprócz nawiasów nie widzę żadnej różnicy.
krystian3w
(krystian3w)
26 Wrzesień 2017 14:00
#18
Po prawej można zauważyć że zwiększyła się ilość wykonywanych czynność z 2 do 4.
sexy69bis
(sexy69bis)
26 Wrzesień 2017 14:10
#19
z nawiasami tyle operacji:
Match 1
Full match 20-32 Asikowierzyn
Group 1. 20-23 Asi
Group 2. 23-28 kowie
Group 3. 28-32 rzyn
Match 2
Full match 41-52 Askowierzyn
Group 1. 41-43 As
Group 2. 43-48 kowie
Group 3. 48-52 rzyn
Match 3
Full match 61-72 Sikowierzyn
Group 1. 61-63 Si
Group 2. 63-68 kowie
Group 3. 68-72 rzyn
Match 4
Full match 80-90 Skowierzyn
Group 1. 80-81 S
Group 2. 81-86 kowie
Group 3. 86-90 rzyn
bez nawiasów:
Match 1
Full match 20-32 Asikowierzyn
Group 1. 23-28 kowie
Match 2
Full match 41-52 Askowierzyn
Group 1. 43-48 kowie
Match 3
Full match 61-72 Sikowierzyn
Group 1. 63-68 kowie
Match 4
Full match 80-90 Skowierzyn
Group 1. 81-86 kowie
dużo mniej, to chyba lepiej
Fizyda
(Fizyda)
26 Wrzesień 2017 16:26
#20
Zależy co robisz i co chcesz uzyskać. Nie znam dokładnej implementacji wyrażeń regularnych, ale to raczej nie są operacje, a dopasowanie do pod-wyrażeń tak by można było skorzystać tylko z wybranego fragmentu w znalezionym ciągu znaków.