From ea2b39a5543db52ca6cff2931a2d005d74c74dc4 Mon Sep 17 00:00:00 2001 From: Chad Curtis Date: Thu, 16 Jan 2025 15:15:58 -0600 Subject: [PATCH] Add reverse-slash path regex match as an exception to excluding paths with reverse-slashes. --- dictquery/tokenizer.py | 4 ++-- tests/test_parser.py | 12 ++++++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) 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')