diff --git a/dictquery/tokenizer.py b/dictquery/tokenizer.py index 2c812fc..325734d 100644 --- a/dictquery/tokenizer.py +++ b/dictquery/tokenizer.py @@ -11,8 +11,8 @@ ('NONE', r'NULL|NONE|NIL'), ('NOW', r'NOW'), ('STRING', r'{}|{}'.format( - r'"([^"\\]*|\\["\\bfnrt\/]|\\u[0-9a-f]{4})*"', - r"'([^'\\]*|\\['\\bfnrt\/]|\\u[0-9a-f]{4})*'")), + r'"([^"\\]*|(?:\\[\w\d\s]+){1,}\\?|\\["\\bfnrt\/]|\\u[0-9a-f]{4})*"', + r"'([^'\\]*|(?:\\[\w\d\s]+){1,}\\?|\\['\\bfnrt\/]|\\u[0-9a-f]{4})*'")), ('LPAR', r'\('), ('RPAR', r'\)'), ('LBRACKET', r'\['), diff --git a/tests/test_parser.py b/tests/test_parser.py index dc562f0..2d3b0bc 100644 --- a/tests/test_parser.py +++ b/tests/test_parser.py @@ -81,6 +81,18 @@ def test_parse_array(self): self.assertEqual(result.value[2].value, 'hello') self.assertEqual(result.value[3].value, 'world') + def test_parse_string_path(self): + parser = DataQueryParser() + pathString = '\\Reverse\\Slash\\path'; + result = parser.parse(f'"{pathString}"'); + self.assertIsInstance(result, StringExpression) + self.assertEqual(result.value, pathString); + + pathString = pathString + '\\ExtraSlash\\'; + result = parser.parse(f'"{pathString}"'); + self.assertIsInstance(result, StringExpression) + self.assertEqual(result.value, pathString); + def test_parse_equal(self): parser = DataQueryParser() result = parser.parse('35 == 13')