Autor Zpráva
Anonymouz
Profil
Ř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
\b v podstatě znamená místo, kde sousedí znaky z tříd
\w ~ [A-Za-z0-9_]
a
\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.
Anonymouz
Profil
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
Anonymouz:
Nejde, \b musíš holt nahradit nějakou svojí množinou oddělovacích symbolů.
Anonymouz
Profil
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
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
Anonymouz
Profil
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.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0