Autor | Zpráva | ||
---|---|---|---|
Anonymouz Profil |
#1 · Zasláno: 11. 6. 2020, 13:32:26
Řeším nahrazení mezer na pevné mezery a mám problém s následujícím regulárním výrazem
(?<=(\bjen\b))\s Jde mi o to, že kromě mezery za slovo "jen", to přidává nedělitelnou mezeru i za slovo "Říjen". Myslím si, že je to tak proto, že písmena s diakritikou jsou brána jinak, než jako běžný text. Vycházím z toho, že použiji stejný regulár na jiné slovo, tak to funguje jak má.
Příklad (?<=(\btest\b))\s - Zobrazí se mezera za slovem "test", ale nebude se zobrazovat za slovem "atest". Další příklad je ten, že když slovo začíná nebo končí diakritikou, tak k dosažení stejného výsledku, musím napsat "opak hranice slova" velké písmeno "\B" takže např (?<=(\Bže\b))\s
Ukázka: regexr.com/56hem |
||
Davex Profil |
#2 · Zasláno: 11. 6. 2020, 23:47:11
\b v podstatě znamená místo, kde sousedí znaky z tříd
\w ~ [A-Za-z0-9_] \W ~ [^\w] A v tvém případě se tedy nedá použít k testování hranice slova s diakritikou. Pokud připadá v úvahu oddělení slov pouze bílými znaky, tak bych testoval jejich přítomnost. |
||
Keeehi Profil |
Anonymouz:
Přidej si modifier u. Raději si otestuj všechny znaky z jazyků s kterými chceš pracovat, ale pokud to nebude něco extrémně divného, tak by to mělo fungovat. |
||
Časová prodleva: 5 dní
|
|||
Anonymouz Profil |
#4 · Zasláno: 17. 6. 2020, 09:21:33
Keeehi:
Děkuji za tip, bohužel to nejde použít. Píšu tyto regulérní výrazy jako konvertor do PSPadu a tam není možné přidávat modifikátory. To znamená, že i např case sensitivitu je třeba řešit tak, že se jednotlivé případy rozepíšou. Davex: Nahradit \b za \s nechci kvůli tomu, že ta mezera tam být nemusí, protože tím procházím i html dokumenty a když je dané slovo obalené třeba <strongem>, tak ho to nenajde, protože tam tu mezeru pak nemá. regexr.com/56s06
Takže například u <strong>MUDr. Pan Novák</strong> by to nic nenahradilo.
Když mám slovo s diakritikou - třeba "že", tak ho musím označit jako (?<=(\Bže\b))\s protože malé \b by mi označovalo i slovo "jenže". Jakmile slovo diakritiku nemá, tak to \b naopak být malé musí, protože jinak mi ho to nebere. Proto si myslím, že diakritika není braná jako normální znak a zajímalo mě, jestli to jde nějak napsat, aby to jako normální znak bylo brané, například formou nějaké entity atd.
|
||
Radek9 Profil |
#5 · Zasláno: 17. 6. 2020, 09:52:50
Anonymouz:
Nejde, \b musíš holt nahradit nějakou svojí množinou oddělovacích symbolů. |
||
Anonymouz Profil |
#6 · Zasláno: 17. 6. 2020, 12:40:47
Radek9:
Chápu, takže v případě slova jen by to vypadalo nějak takto (?![^<]*>)(?<=([\s|\>|\/\>]jen))\s|& Jde do té množiny znaků nějak zahrnout i začátek řádku? PSPad evidentně nepovažuje začátek řádku jako bílý znak, jiné editory to tak berou. Problém mám s tím, že do hranatých závorek nemůžu napsat ^, protože to by nebyl začátek řádku zahrnutý v množině, ale negace. A bez zahrnutí možnosti, začátku řádku, to nic nenachází. Zároveň nemůžu používat otazník pro případ, kdy tam daný znak být může a nemusí, protože lookbehind musí mít pevně daný počet znaků. Je nějaká možnost jak to udělat, nebo to musím všechno rozepisovat?
|
||
Kajman Profil |
#7 · Zasláno: 17. 6. 2020, 13:40:58
V hranatých závorkách nemá | smysl nebo. Tam se dává výčet nebo rozsah znaků. Pro začátek řádku použijte ^ bez hranatých závorek, něco jako
regexr.com/56sjm |
||
Časová prodleva: 5 dní
|
|||
Anonymouz Profil |
#8 · Zasláno: 22. 6. 2020, 15:10:49
Kajman:
Jak to udělám, aby to slovo bylo součástí lookbehind i s těmi znaky? Potřebuji filtrovat pouze tu mezeru za vybraným slovem.
|
||
Kajman Profil |
Nepoužijete ?= a budete hledat jen mezeru.
|
||
Časová prodleva: 4 roky
|
0