diff --git a/src/calibre/ebooks/epub/cfi/parse.py b/src/calibre/ebooks/epub/cfi/parse.py index 5bdd790cde..ea20b226f5 100644 --- a/src/calibre/ebooks/epub/cfi/parse.py +++ b/src/calibre/ebooks/epub/cfi/parse.py @@ -17,7 +17,7 @@ class Parser: def __init__(self): # All allowed unicode characters + escaped special characters - special_char = r'[\[\](),;=^]' + special_char = r'[\[\](),;=^-]' unescaped_char = '[[\t\n\r -\ud7ff\ue000-\ufffd\U00010000-\U0010ffff]--%s]' % special_char escaped_char = r'\^' + special_char chars = r'(?:%s|(?:%s))+' % (unescaped_char, escaped_char) diff --git a/src/calibre/ebooks/epub/cfi/tests.py b/src/calibre/ebooks/epub/cfi/tests.py index e8f92be52e..81ad7ce47e 100644 --- a/src/calibre/ebooks/epub/cfi/tests.py +++ b/src/calibre/ebooks/epub/cfi/tests.py @@ -86,6 +86,7 @@ class Tests(unittest.TestCase): # Test parsing of text assertions ('/1:3[aa^,b]', a('aa,b'), ''), + ('/1:3[aa^-b]', a('aa-b'), ''), ('/1:3[aa^,b,c1]', a('aa,b', 'c1'), ''), ('/1:3[,aa^,b]', a(after='aa,b'), ''), ('/1:3[;s=a]', a(s='a'), ''),