From 0f9e5412482467bac55178f225e2f4f5cb9b4fe6 Mon Sep 17 00:00:00 2001
From: Alban Gruin
Date: Sat, 10 Feb 2018 20:01:19 +0100
Subject: Correction de la regex pour supporter les groupes avec plusieurs
 parties entre parenthèse.  Les nouveaux cas de tests passent avec succès.

---
 utils.py | 29 +++++++++++++++--------------
 1 file changed, 15 insertions(+), 14 deletions(-)

diff --git a/utils.py b/utils.py
index 080768b..cd7f1f8 100644
--- a/utils.py
+++ b/utils.py
@@ -1,4 +1,4 @@
-#    Copyright (C) 2017  Alban Gruin
+#    Copyright (C) 2017-2018  Alban Gruin
 #
 #    celcatsanitizer is free software: you can redistribute it and/or modify
 #    it under the terms of the GNU Affero General Public License as published
@@ -53,19 +53,20 @@ def group_courses(courses):
 def parse_group(name):
     # Explication de la regex
     #
-    # ^(.+?)\s*(s(\d)\s+(CM|TD|TP|G)(\w\d{0,3}))?(\s+\(.+\))?$
-    # ^(.+?)\s*(s(\d)\s+(CM|TD|TP|G)(\w\d{0,3}))?(\s+\(.+\))?$
-    # ^                                                        début de la ligne
-    #  (.+?)                                                   correspond à au moins un caractère
-    #       \s*                                                éventuellement un ou plusieurs espaces
-    #          (s(\d)\s+                                       un s suivi d’un nombre et d’un ou plusieurs espaces
-    #                   (CM|TD|TP|G)                           « CM » ou « TD » ou « TP » ou « G »
-    #                               (\w\d{0,3})                suivi d’un caractère puis entre 0 et 3 chiffres
-    #                                          )?              groupe optionnel
-    #                                            (\s+          un ou plusieurs espaces
-    #                                                \(.+\))?  un ou pliseurs caractères entre parenthèses
-    #                                                        $ fin de la ligne
-    group_regex = re.compile(r"^(.+?)\s*(s(\d)\s+(CM|TD|TP|G)(\w\d{0,3}))?(\s+\(.+\))?$")
+    # ^(.+?)\s*(s(\d)\s+(CM|TD|TP|G)(\w\d{0,3}))?(\s+\([^\(\)]+\))?$
+    # ^                                                              début de la ligne
+    #  (.+?)                                                         correspond à au moins un caractère
+    #       \s*                                                      éventuellement un ou plusieurs espaces
+    #          (s(\d)\s+                                             un s suivi d’un nombre et d’un ou plusieurs espaces
+    #                   (CM|TD|TP|G)                                 « CM » ou « TD » ou « TP » ou « G »
+    #                               (\w\d{0,3})                      suivi d’un caractère puis entre 0 et 3 chiffres
+    #                                          )?                    groupe optionnel
+    #                                            (\s+                un ou plusieurs espaces
+    #                                                \([^\(\)]+\))?  un ou plusieurs caractères (exceptés des espaces) entre parenthèses
+    #                                                            $   fin de la ligne
+    group_regex = re.compile(
+        r"^(.+?)\s*(s(\d)\s+(CM|TD|TP|G)(\w\d{0,3}))?(\s+\([^\(\)]+\))?$")
+
     search = group_regex.search(name)
     if search is None:
         return name, None, None
-- 
cgit v1.2.1