Home > Mobile >  Dart regular expressions for grouping chunks of data
Dart regular expressions for grouping chunks of data

Time:09-10

I am trying to use regular expressions in Dart to group data chunks that have a similar structure. Following is a sample string that I am using.

@prefix : <#>.
@prefix acl: <http://www.w3.org/ns/auth/acl#>.
@prefix c: </profile/card#>.
@prefix c0: <https://anushka.net/profile/card#>.
@prefix c1: <https://isuru.net/profile/card#>.

:ControlReadWrite
    a acl:Authorization;
    acl:accessTo <personal-data.ttl>;
    acl:agent c:me;
    acl:mode acl:Control, acl:Read, acl:Write.
:ReadWrite
    a acl:Authorization;
    acl:accessTo <profile-data.ttl>;
    acl:agent c:me, c0:me;
    acl:mode acl:Read.
:Read
    a acl:Authorization;
    acl:accessTo <medical-data.ttl>, <education-data.ttl>;
    acl:agent c:me, c0:me, c1:me;
    acl:mode acl:Read.

I want to divide the above string into the following three groups ignoring the lines which have the word @prefix.

    a acl:Authorization;
    acl:accessTo <personal-data.ttl>;
    acl:agent c:me;
    acl:mode acl:Control, acl:Read, acl:Write.
    a acl:Authorization;
    acl:accessTo <profile-data.ttl>;
    acl:agent c:me, c0:me;
    acl:mode acl:Read.
    a acl:Authorization;
    acl:accessTo <medical-data.ttl>, <education-data.ttl>;
    acl:agent c:me, c0:me, c1:me;
    acl:mode acl:Read.

Since each of this group ends with a . and \n, I tried using /a acl:Authorization([a-zA-Z;<>\n: -0-9]\.\n)/ but that did not work. Any help resolving this would be highly appreciated.

CodePudding user response:

If you know that it's always 3 lines following after a acl:Authorization;-line, you can try this:

(a acl:Authorization;(?:\n.*){3})

Demo: https://regex101.com/r/pziduQ/1

CodePudding user response:

I'd go with recognizing the :SomeWords as the start, recognize ; as separator and . as end.

Something like

var re = RegExp(r"(?<=^:[a-zA-Z] \n)(?:^\s .*;$\n)*(?:^\s .*\.\n)", 
  multiLine: true);

This matches lines starting with space and ending with ; or (for the last one) ., and preceded by a line of :SomeWords.

  • Related