def test_group(self): g = VisualRegexGrammar() self._parseStringTest( g.item(), '(a)', Schema.Group(capturing='1', subexp=Schema.LiteralChar(char='a'))) self._parseStringTest(g.item(), '(?i)', Schema.SetFlags(flags='i')) self._parseStringTest( g.item(), '(?:a)', Schema.Group(subexp=Schema.LiteralChar(char='a'))) self._parseStringTest( g.item(), '(?P<id>a)', Schema.DefineNamedGroup(subexp=Schema.LiteralChar(char='a'), name='id')) self._parseStringTest(g.item(), '(?P=id)', Schema.MatchNamedGroup(name='id')) self._parseStringTest(g.item(), '(?#abc)', Schema.Comment(text='abc')) self._parseStringTest( g.item(), '(?=a)', Schema.Lookahead(subexp=Schema.LiteralChar(char='a'), positive='1')) self._parseStringTest( g.item(), '(?!a)', Schema.Lookahead(subexp=Schema.LiteralChar(char='a'))) self._parseStringTest( g.item(), '(?<=a)', Schema.Lookbehind(subexp=Schema.LiteralChar(char='a'), positive='1')) self._parseStringTest( g.item(), '(?<!a)', Schema.Lookbehind(subexp=Schema.LiteralChar(char='a')))
def comment(self): return (Literal('(?#') + RegEx('[^)]+').optional() + Literal(')') ).action(lambda input, begin, end, x, bindings: Schema.Comment( text=(x[1] if x[1] is not None else '')))