You are here: PSPad forum > České diskuzní fórum > Automatické doplňování pevných mezer

Automatické doplňování pevných mezer

Goto Page: Previous1 2 3 Next

#11 Re: Automatické doplňování pevných mezer

Posted by: Rybka | Date: 2020-06-10 08:43 | IP: IP Logged

Jak mohu povolit diakritiku v regulárních výrazech? Zjistila jsem, že při určitých výrazech to začne vyhazovat chybu, jakmile použiji diakritiku.

Příklad:

Projde

(?![^<]*>)(?<=(\ba|b|d))\s|&nbsp;

Neprojde

(?![^<]*>)(?<=(\baž|b|d))\s|&nbsp;

Oba výrazy se liší pouze diakritikou. Ten první konvertorem projde a ten druhý neprojde, vyhodí v PSPadu chybovou hlášku "Error in regular expression at offset 24: lookbehind assertion is not fixed length."

V JavaScriptu s podobným regulárem nemám problém.

Options: Reply | Quote | Up ^


#12 Re: Automatické doplňování pevných mezer

Posted by: Rybka | Date: 2020-06-10 08:58 | IP: IP Logged

Ukázka kódu, který se snažím umístit

(?<!<[^>]*)((?<=(\ba\b|\bi\b|\bo\b|\bu\b|\bk\b|\bs\b|\bv\b|\bz\b|\bA\b|\bI\b|\bO\b|\bU\b|\bK\b|\bS\b|\bV\b|\bZ\b|\bby\b|\bco\b|či\b|\bdo\b|\bje\b|\bke\b|\bku\b|\bna\b|\bno\b|\bod\b|\bpo\b|\bse\b|\bta\b|\bto\b|\bve\b|\bza\b|\bze\b|že\b|\baby\b|\bbyl\b|\bcož|\bjen\b|\bkdyž|\bkde\b|\bkdy\b|\bkterý|\bkterá|\bkteré|\bnad\b|\bpod\b|\bpro\b|\bpřed\b|\bpři\b|\btak\b|\bCo\b|Či\b|\bDo\b|\bJe\b|\bKe\b|\bKu\b|\bNa\b|\bNo\b|\bOd\b|\bPo\b|\bSe\b|\bTa\b|\bTo\b|\bVe\b|\bZa\b|\bZe\b|Že\b|\bAby\b|\bByl\b|\bCož|\bJen\b|\bKdyž|\bKde\b|\bKdy\b|\bKterý|\bKterá|\bKteré|\bNad\b|\bPod\b|\bPro\b|\bPřed\b|\bPři\b|Tak))\s|(?<=(Bc\.|\bBcA\.|\bing\.|\bIng\.|\bIng\.arch\.|\bMUDr\.|\bMVDr\.|\bMgA\.|\bMgr\.|\bJUDr\.|\bPhDr\.|\bRNDr\.|\bPharmDr\.|\bThLic\.|\bThDr\.|\bPh\.D\.|\bTh\.D\.|\bprof\.|\bdoc\.|\bCSc\.|\bDrSc\.|\bPaedDr\.|\bDr\.|\bPhMr\.|\bDiS\.))\s|\s(?=(Bc\.|\bBcA\.|\bing\.|\bIng\.|\bIng\.arch\.|\bMUDr\.|\bMVDr\.|\bMgA\.|\bMgr\.|\bJUDr\.|\bPhDr\.|\bRNDr\.|\bPharmDr\.|\bThLic\.|\bThDr\.|\bPh\.D\.|\bTh\.D\.|\bprof\.|\bdoc\.|\bCSc\.|\bDrSc\.|\bPaedDr\.|\bDr\.|\bPhMr\.|\bDiS\.))\s|(?<=(\bP\b\.|\bp\b\.|\bPí\.|\bpí|\bBr\b\.|\bbr\b\.|\bFr\b\.|\bfr\b\.|\bR\b\.|\br\b\.|\bsv\b\.|\btj\b\.))\s|\s(?=(Kč|€))|(?<=\d)\s(?=(Leden|Únor|Březen|Duben|Květen|Červen|Červenec|Srpen|Září|Říjen|Listopad|Prosinec|Ledna|Února|Března|Dubna|Května|Června|Července|Srpna|Září|Října|Listopadu|Prosince))|(?<=\d)\s(?=(leden|únor|březen|duben|květen|červen|červenec|srpen|září|říjen|listopad|prosinec|ledna|února|března|dubna|května|června|července|srpna|září|října|listopadu|prosince))|(?<=\d)\s(?=(\bm\b|\bg\b|\bl\b|\bq\b|\bt\b|\bw\b|\bJ\b|%|\bks\b|\bmm\b|\bcm\b|\bkm\b|\bmg\b|\bdkg\b|\bkg\b|\bml\b|\bcl\b|\bdl\b|\bhl\b|\bm3|\bm³|\bkm3|\bkm³|\bmm2||\bmm²|\bcm2|\bcm²|\bdm2|\bdm²|\bm2|\bm²|\bkm2|\bkm²|\bha\b|\bPa\b|\bhPa\b|\bkPa\b|\bMPa\b|\bbar\b|\bmbar\b|\bnbar\b|\batm\b|\bpsi\b|\bkW\b|\bMW\b|\bHP\b|\bm\/s\b|\bkm\/h\b|\bm\/min\b|\bMPH\b|\bcal\b|\bWh\b|\bkWh\b|\bkp·m\b|°|\bkB\b|\bdB\b|\bMB\b|\bGB\b|\bkHz\b|\bMHz))|(\s(?=(\bs\.))|\s(?=(\br\.))|\s(?=(\bo\.)))|(?<=(roku))\s(?=(\d))|\s(?=sp\.\szn\.)|(?<=sp\.)\s(?=zn\.)|(?<=sp\.\szn\.)\s|(?<=\d)\s(?=bod)|(?<=\d)\s(?=rok)|(?<=\d)\s(?=let)|(?<=\d)\s(?=promile)|(?<=\d)\s(?=\d)|(?<=\bič)\s(?=\d)|(?<=\bdič)\s(?=\d)|(?<=\bIČ)\s(?=\d)|(?<=\bDIČ)\s(?=\d)|(?<=\d\.)\s(?=\bstoletí)|(?<=\d)\s(?=-\s)|(?<=\d\s-)\s)

Ale už koukám pořádně a vidím, že není chyba v diakritice, ale různorodé délce. Takže ten řetězec je špatně a to že to v JS funguje, je spíš náhoda, než že by to bylo dobře.

Options: Reply | Quote | Up ^


#13 Re: Automatické doplňování pevných mezer

Posted by: pspad | Date: 2020-06-10 11:56 | IP: IP Logged

Musim zjistit, v čem je problém.

Options: Reply | Quote | Up ^


#14 Re: Automatické doplňování pevných mezer

Posted by: pspad | Date: 2020-06-10 17:01 | IP: IP Logged

Dobrý den

S tím výrazem bude problém v délce.
INI soubor, který je použitý jako zvýrazňovač má omezení v délce řádky, tuším 255 znaků. Ale musím to ověřit.

Není třeba udělat jeden obrovský regulární výraz, klidně může být 100 malých, umístěných pod sebou.
Bude to taky mnohem čitelnější a udržovatelnější

Options: Reply | Quote | Up ^


#15 Re: Automatické doplňování pevných mezer

Posted by: pspad | Date: 2020-06-10 17:04 | IP: IP Logged

A ještě jedna poznámka. Uložte definici v kódovani s UTF-8 s BOM

Options: Reply | Quote | Up ^


#16 Re: Automatické doplňování pevných mezer

Posted by: vbr | Date: 2020-06-10 17:14 | IP: IP Logged

Rybka:
...
Projde

(?![^<]*>)(?<=(\ba|b|d))\s|&nbsp;

Neprojde

(?![^<]*>)(?<=(\baž|b|d))\s|&nbsp;

...
Ten první konvertorem projde a ten druhý neprojde, vyhodí v PSPadu chybovou hlášku "Error in regular expression at offset 24: lookbehind assertion is not fixed length."

V JavaScriptu s podobným regulárem nemám problém.

Zdravim,
zminena chyba ukazuje na ruzne vlastnosti jednotlivych knihoven regulernich vyrazu.
Prave v pripadnych omezenich na "lookbehind assertion" se nektere z nich lisi; nektere vyzaduji pevnou velikost uplne bez rozdilu (to je zrejme pripad knihovny pouzivane v PSPadu - alternativni nalezy musi mit stejnou delku), nektere umoznuji variabilitu v ramci konecneho urciteho mozneho poctu znaku (tj. je mozne "a|aa" nebo "a{1,5}" a konecne nektere zde podporuji i variabilni, potencialne neomezenou delku lookbehind "napr. "a*".

www.regular-expressions.info
Important Notes About Lookbehind ...

V ramci vyrazu jde nejspis o cast:
(?<=(\baž|b|d))

Mozny postup, ktery mne napada pri stavajici podpore regex je rozdeleni konverznich vyrazu na nekolik po sobe, napr. vzdy na predlozky stejne delky, pokud je to mozne.

Zdravim,
vbr

Options: Reply | Quote | Up ^


#17 Re: Automatické doplňování pevných mezer

Posted by: Rybka | Date: 2020-06-12 06:30 | IP: IP Logged

vbr:

Mozny postup, ktery mne napada pri stavajici podpore regex je rozdeleni konverznich vyrazu na nekolik po sobe, napr. vzdy na predlozky stejne delky, pokud je to mozne.

Zdravim,
vbr

Je to tak, tento postup funguje. A to samé platí i na použití otazníku, když je výraz, kde může a nemusí být tečka.
(?![^<]*>)(?<=\d.?)\s(?=\blistopad\b)|&nbsp;

Jediné řešení tedy asi je to rozepisovat ↓.

(?![^<]*>)(?<=\d)\s(?=\blistopad\b)|&nbsp;
(?![^<]*>)(?<=\d.)\s(?=\blistopad\b)|&nbsp;

Děkuji za pomoc.

Options: Reply | Quote | Up ^


#18 Re: Automatické doplňování pevných mezer

Posted by: Rybka | Date: 2020-06-12 06:53 | IP: IP Logged

Tak ještě snad už poslední dotaz. Je možné řešit case sensitive na úrovni jednotlivých výrazů a ne jen v rámci celého dokumentu? Zkusila jsem z hlavičky dokumentu smazat "ForwardIgnoreCase=0" a v regexu pak použít modifikátor/i, ale zdá se, že jakmile začnu využívat modifikátor, to pak nefunguje.

/(?![^<]*>)(?<=\d\.)\s(?=\bLeden\b)/i|&nbsp;

Zkusila jsem různé kombinace s ponecháním hlavičky, přepsáním na jedničku, dát to Ičko až za nbsp atd. Je možné, že použití modifikátorů není povolené, nebo to jen píšu špatně?

Options: Reply | Quote | Up ^


#19 Re: Automatické doplňování pevných mezer

Posted by: pspad | Date: 2020-06-12 07:05 | IP: IP Logged

Spis je to tak, ze na zaklade hlavicky se zapise modifikator.
Podivam se na to.

Options: Reply | Quote | Up ^


#20 Re: Automatické doplňování pevných mezer

Posted by: Rybka | Date: 2020-06-16 15:15 | IP: IP Logged

Nějakým způsobem jsem se prokousala tím, že je třeba rozepisovat jednotlivé možnosti velkých a malých textů včetně případů, kdy tam může a nemusí být tečka. Ale poslední věci na čem mám zásek je tento výraz:
(?![^<]*>)(?<=[a-z]+)\s(?=s\.\sr\.\so\.)|(?![^<]*>)(?<=.*\ss\.)\s(?=r\.\so\.)|(?![^<]*>)(?<=.*\ss\.\sr\.)\s(?=o\.)

Živá ukázka

V PSPadu se to do konvertoru musí rozepsat na jednotlivé řádky, to je jasné, ale jakmile se to rozepíše, a spustí nahrazování, nahradí se pouze jedna mezera a další to vynechá, protože už další pravidla neplatí kvůli absenci bílé mezery, která je v tu chvíli nahrazena. Je nějaká možnost, jak tento regulár napsat jinak, aby hned v jednom výrazu našel všechny mezery, aby se to nemuselo rozepisovat na všechny možnosti (jestli počítam dobře, tak by se jinak muselo rozepsat 3×4 možností + další možnosti na velké a malé znaky)?

Dokáže vůbec regulár najít více takto oddělených znaků?

Edited 1 time(s). Last edit at 2020-06-16 15:22 by Rybka.

Options: Reply | Quote | Up ^


Goto Page: Previous1 2 3 Next





Editor PSPad - freeware editor, © 2001 - 2020 Jan Fiala, Hosted by Webhosting TOJEONO.CZ, design by WebDesign PAY & SOFT, code Petr Dvořák, Privacy policy and GDPR