3 berichten aan het bekijken - 1 tot 3 (van in totaal 3)
  • Q:
    Bijdrager
    Jakko Westerbeke

    "of" in lookbehind in regexp

    Eigenlijk geen programmeervraag want dit gaat over InDesign, maar ik vermoed dat in dit subforum er sneller antwoord gaat komen;)

    Voor wie er niet bekend mee is, in InDesign kun je een karakterstijl toepassen aan de hand van een regexp. Dit gebruik ik in een bepaald document om een stijl te geven aan spaties die na het einde van een zin komen — namelijk, om de spatie twee keer zo breed te maken zoals in sommige landen en tijden gebruikelijk was/is. Op zich is dit geen probleem met een lookbehind:

    (?<=\.)\s

    (En &‌lt; hoort natuurlijk < te zijn, maar dat wordt binnen code-tags door het forum omgezet in een HTML-escape … :roll:)

    Waar ik dan natuurlijk wel tegenaanloop, is dat ook spaties na afkortingen breder gemaakt worden, en dat moet nu juist weer niet. Gelukkig zijn het niet zoveel afkortingen, dus dacht ik: ik kan ze als uitzondering opnemen in de regexp met nog een lookbehind. En inderdaad:

    (?<=(?<!Nr)\.)\s

    werkt keurig om geen “dubbele” spatie te krijgen in bijvoorbeeld “Nr. 2”.

    Maar nu: de enige manier die mij lukt om meerdere uitzonderingen werkend te krijgen, is door een aparte lookbehind voor elke te gebruiken:

    (?<=(?<!Nr)(?<!Nrs)(?<!Afb)\.)\s

    enz.

    Dit lijkt me toch niet de beste manier, aangezien hij volgens mij hier vier keer terugzoekt terwijl twee keer ook zou moeten kunnen, als ik een “of”-opdracht werkend zou kunnen krijgen. Maar iets als

    (?<=(?<!Nr|Nrs|Afb)\.)\s

    weigert … wat doe ik verkeerd?

    Bijdrager
    Verwijder

    Ik heb geen Indesign en in textWrangler werkt het. Volgens de tabel op http://www.jongware.com/idgrephelp.html werkt alleen fixed length lookbehind. Je hebt pech denk ik.

    Bijdrager
    Jakko Westerbeke

    Aha. Dat is in elk geval een bruikbare tip, want een snelle controle levert op dat het op deze manier wel werkt:

    (?<=(?<!Nr|aa|bb|cc)(?<!Nrs|Afb|xxx|yyy|zzz)\.)\s

    en zo heb ik maar drie zoekopdrachten, in plaats van (aantal afkortingen) + 1.

    Of het voor de snelheid uitmaakt weet ik niet, maar in elk geval maakt het de regexp makkelijker te lezen in het korte, éénregelige tekstvak waar je hem in moet typen:)

3 berichten aan het bekijken - 1 tot 3 (van in totaal 3)

Je moet ingelogd zijn om een reactie op dit onderwerp te kunnen geven.