Toon posts:

[Regex] Regex pakt net te weinig

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoi,

Ben bezig met een RTF naar HTML converter. Aangekomen bij de Tabellen .... wat een ongeregeld zooitje, geen vast pattroon, maar goed.

In de RTF code komt bijvoorbeeld dit voor: (zelf enters voor leesbaarheid ertussen gepompt)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
... \par \ltrrow\trowd \irow0\irowband0\lastrow \ltrrow\ts11\trgaph108\trrh491
\trleft1418\trftsWidth3\trwWidth8299\trftsWidthB3\trftsWidthA3
\trautofit1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrnone 
\clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth992
\clshdrawnil \cellx2410\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone 
\clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth3544\clshdrawnil \cellx5954
\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr
\brdrnone \cltxlrtb\clftsWidth3\clwWidth3763\clshdrawnil \cellx9717
\pard\plain \ltrpar\s15\ql \li0\ri0\widctlpar\intbl\tqc\tx4703\tqr\tx9406\faauto
\rin0\lin0\pararsid12548772 \rtlch \af36\afs22\alang1025 
\ltrch \f36\fs22\lang1043\langfe1033\cgrid
\langnp1043\langfenp1033 \rtlch \af131\afs15 \ltrch \f131\fs15
\lang2057\langfe1033\langnp2057\insrsid3343233\charrsid9713264 
\cell \rtlch \af131 ....


Mijn regex:
code:
1
\\trowd(.*?)\\cell(?=\W|\s)
filtert een rij met één kolom.

Bovenstaande RTF code pakt ie goed, dus van \trowd en tot en met de \cell tag.

Mochten er nou meerdere \cell tags staan, mogelijk spatie gescheiden, dan zou de regex die \cell tags ook moeten mee nemen ....

Dus zoiets als
code:
1
2
\lang2057 \trowd \langfe1033\langnp2057\insrsid3343233\charrsid9713264 
\cell \cell \cell \rtlch
(RTF niet correcte code)

zou ie ook moeten pakken. Dus de extra \cell tags erbij.

Iemand enig idee hoe ik mijn Regex moet aanpassen?

Ik dacht zoiets als :
code:
1
\\trowd(.*?)\\cell(?=\W|\s|(\s|\W(\\cell(?=\W|\s))*))
Dus: Begin met \trowd en pak alles (niet greedy) tot \cell. Deze cell moet worden gevolgd door een Non-character of White-space of één of meedere \cell gevolgd door een Non-character of spatie....

Maar die werkt niet .... O-)

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Ik ben niet echt thuis in de specifieke syntax van RTF, maar mijn eerste ingeving is: zou je niet beter kunnen gaan tokenizen ipv reguliere expressies te gebruiken?

Intentionally left blank


Verwijderd

Topicstarter
Yep. Zou beter zijn (zou alleen niet weten hoe te tokenizen (\me gaat zo zoeken))

Maar aan de tabellen is geen touw vast te knopen anders. Zit al meer dan een dag over de oplossing na te denken, maar ..... misschien is tokenizen de oplossing.

Verder, zoals ik zei, er is niet echt een vast patroon in te ontdekken. Grooooote nadeel

Verwijderd

Topicstarter
Ik werk al ongeveer op zo'n manier... maar niet als tokens. Ik process elke RTF tag en als die herkend wordt, dan wordt er iets mee gedaan.

Werkt verder goed. Als ik deze regex werkend heb, dan kan ik altijd nog Tokenizen. Maar voor dit moment moet ik 'm werkend maken :)

Verwijderd

Topicstarter
Heb m al.

code:
1
\\trowd(.*?)\\cell(\s*\\cell)*(?=\W|\s)


Dacht waarschijnlijk te moeilijk :P

Verwijderd

Topicstarter
hmmm toch niet.


denk niet dat het met regexen gaat werken ...... damnit
Pagina: 1