From 2434ea269de85c9bf21b458f9b63eb141f5837ee Mon Sep 17 00:00:00 2001 From: Justin Israel Date: Tue, 30 May 2023 09:36:25 +1200 Subject: [PATCH] fix regex to handle parsing multi-component file extensions with single character components ("file.1.a.ext") (fixes #120) --- src/fileseq/constants.py | 24 ++++++++++++------------ test/complex_ext/1.a.jpg | 0 test/complex_ext/2.a.jpg | 0 test/complex_ext/3.a.jpg | 0 test/complex_ext/file.5.a.ext | 0 test/complex_ext/file.6.a.ext | 0 test/complex_ext/file.7.a.ext | 0 test/test_unit.py | 4 ++++ 8 files changed, 16 insertions(+), 12 deletions(-) create mode 100644 test/complex_ext/1.a.jpg create mode 100644 test/complex_ext/2.a.jpg create mode 100644 test/complex_ext/3.a.jpg create mode 100644 test/complex_ext/file.5.a.ext create mode 100644 test/complex_ext/file.6.a.ext create mode 100644 test/complex_ext/file.7.a.ext diff --git a/src/fileseq/constants.py b/src/fileseq/constants.py index 82d68af..e721358 100644 --- a/src/fileseq/constants.py +++ b/src/fileseq/constants.py @@ -155,12 +155,12 @@ def __eq__(self, other): # Regular expression pattern for matching file names on disk. DISK_PATTERN = r""" \A - ((?:.*[/\\])?) # dirname - (.*?) # basename - (-?\d+)? # frame - ( # ext - (?:\.\w*[a-zA-Z]\w)* # optional leading alnum ext prefix (.foo.1bar) - (?:\.[^.]+)? # ext suffix + ((?:.*[/\\])?) # dirname + (.*?) # basename + (-?\d+)? # frame + ( # ext + (?:\.\w*[a-zA-Z]\w?)* # optional leading alnum ext prefix (.foo.1bar) + (?:\.[^.]+)? # ext suffix ) \Z """ @@ -169,12 +169,12 @@ def __eq__(self, other): # Regular expression pattern for matching file names on disk allowing subframes. DISK_SUB_PATTERN = r""" \A - ((?:.*[/\\])?) # dirname - (.*?) # basename - (-?\d+(?:\.\d+)?)? # frame - ( # ext - (?:\.\w*[a-zA-Z]\w)* # optional leading alnum ext prefix (.foo.1bar) - (?:\.[^.]+)? # ext suffix + ((?:.*[/\\])?) # dirname + (.*?) # basename + (-?\d+(?:\.\d+)?)? # frame + ( # ext + (?:\.\w*[a-zA-Z]\w?)* # optional leading alnum ext prefix (.foo.1bar) + (?:\.[^.]+)? # ext suffix ) \Z """ diff --git a/test/complex_ext/1.a.jpg b/test/complex_ext/1.a.jpg new file mode 100644 index 0000000..e69de29 diff --git a/test/complex_ext/2.a.jpg b/test/complex_ext/2.a.jpg new file mode 100644 index 0000000..e69de29 diff --git a/test/complex_ext/3.a.jpg b/test/complex_ext/3.a.jpg new file mode 100644 index 0000000..e69de29 diff --git a/test/complex_ext/file.5.a.ext b/test/complex_ext/file.5.a.ext new file mode 100644 index 0000000..e69de29 diff --git a/test/complex_ext/file.6.a.ext b/test/complex_ext/file.6.a.ext new file mode 100644 index 0000000..e69de29 diff --git a/test/complex_ext/file.7.a.ext b/test/complex_ext/file.7.a.ext new file mode 100644 index 0000000..e69de29 diff --git a/test/test_unit.py b/test/test_unit.py index ba5b996..a010ad7 100755 --- a/test/test_unit.py +++ b/test/test_unit.py @@ -1645,6 +1645,8 @@ def testFindSequenceOnDisk(self): ("subframe_seq/baz.#.0000.exr", "subframe_seq/baz.1-4#.0000.exr"), ("subframe_seq/baz.0001.#.exr", "subframe_seq/baz.0001.0-7500x2500#.exr"), ("subframe_seq/baz.0001.0000.exr", "subframe_seq/baz.0001.0-7500x2500#.exr"), + ("complex_ext/@.a.jpg", "complex_ext/1-3@.a.jpg"), + ("complex_ext/file.@.a.ext", "complex_ext/file.5-7@.a.ext"), ] for pattern, expected in tests: @@ -1703,6 +1705,8 @@ def testStrictPadding(self): ("seq/big.#@.ext", None), ("multi_range/file_@@.0001.exr", None), ("multi_range/file_#.0001.exr", "multi_range/file_3-5#.0001.exr"), + ("complex_ext/#.a.jpg", None), + ("complex_ext/@.a.jpg", "complex_ext/1-3@.a.jpg"), ] for pattern, expected in tests: