i trying match automatically grade student's answer question correct answer is:
read , execute owner , read the order of answer doesn't matter so
read , read , execute owner is acceptable answer. fluff (and, for) doesn't matter looking either of these
read execute owner read read read execute owner i can regex accept either answer
(?=.*read.*execute.*owner)(?=.*read.*everyone) but accepts more answer wrong "read execute owner read execute everyone". tried using negative look-ahead "execute" everyone, still matches "execute" owner , says no regex match.
is there way accomplish trying do? thanks.
just make and/for optional.
# (?=.*(\bread(?:\s+and)?\s+execute(?:\s+for)?\s+owner\b))(?=.*(\bread(?:\s+for)?\s+everyone\b)) (?= .* ( # (1 start) \b read (?: \s+ , )? \s+ execute (?: \s+ )? \s+ owner \b ) # (1 end) ) (?= .* ( # (2 start) \b read (?: \s+ )? \s+ \b ) # (2 end) ) edit: allow optionally any words between the
key words excluding keywords between keywords.
-
# (?=.*(\bread(?:\s+(?:(?!\b(?:read|execute|owner|everyone)\b).)+?)?\s+execute(?:\s+(?:(?!\b(?:read|execute|owner|everyone)\b).)+?)?\s+owner\b))(?=.*(\bread(?:\s+(?:(?!\b(?:read|everyone|execute|owner)\b).)+?)?\s+everyone\b)) (?= .* ( # (1 start) \b read (?: # optional words between keywords - # not of or other ones keywords \s+ (?: (?! \b (?: read # | execute # | owner # | # other ) \b ) . )+? )? \s+ execute (?: # optional words between keywords \s+ (?: (?! \b (?: read | execute | owner | ) \b ) . )+? )? \s+ owner \b ) # (1 end) ) (?= .* ( # (2 start) \b read (?: # optional words between keywords - # not of or other ones keywords \s+ (?: (?! \b (?: read # | # | execute # other | owner # other ) \b ) . )+? )? \s+ \b ) # (2 end) )
Comments
Post a Comment