Q:

JSON Object restructuring advice?

I'm about to embark on restructuring a large quantity of JSON Object data to a different format for this class assignment i'm working on for next summer. Unfortunately, the data in its current state isn't exactly workable to my needs and I don't have a way of scraping this data in any other way. The result of scraping comes back as;
[
{
"classes": [
  [
    {
      "Friday": "",
      "Monday": "",
      "Tuesday": "",
      "Saturday": "",
      "Thursday": "",
      "Wednesday": ""
    },
    {
      "Friday": "",
      "Monday": "",
      "Tuesday": "",
      "Saturday": "",
      "Thursday": "",
      "Wednesday": ""
    },
    {
      "Friday": "",
      "Monday": "",
      "Tuesday": "",
      "Saturday": "",
      "Thursday": "",
      "Wednesday": "10:00 - 11:00MK4603 - LEC firstname lastname DR KBG121-12"
    }

The snippet above, is for the 10:00 timeslot, (27 slices representing college hours.)
Taking a look at a typical key:
10:00 - 11:00MK4603 - LEC firstname lastname DR KBG121-12

It's broken up into the following elements.
[10:00 - 11:00][MK4603] [-] [LEC] [firstname lastname DR] [KBG12][1-12]
Time          Module    n/a  Type  Lecturer               Room#  Weeks`

Time is in 24 hours, Module will exactly contain that length of char, Type is either: TUT or LEC, Lecturer is always terminated by a DR if applicable, Room is broken down to: First one-two letter's = building initials | following letter is floor with one char | following two numbers is floor number.
However sometimes (this is an edge case), the university may place two "templates" of the above in the same HTML tr box, which would result in -
10:00 - 11:00MK4603 - LEC firstname lastname DR KBG121-12 11:00 - 12:00LI4113 
   - LEC first last DR D10501-12
What would the best method of dealing with separating this sting and those alike to it into these components? I'm perfectly able to handle the development after, but I'm at a total loss on how to deal with the string as it is formatted currently. Would anyone be able to offer advice on how to go about this? 
I've had some limited success with Regex as I struggle with them, however I did produce this to find the times in the string:
[(00-24)]*[(:)].{2}

Is there a more elegant or creative solution to this problem that anyone might be aware of?

A:

Your regex can be found here:
https://regex101.com/r/x79lan/1/

Bellow is an explanation of all rules:
(
    (?P<starts_at>\d\d\:\d\d)         // the format for days, ?P<starts_at> is optional and helps giving the captured group a name. The real rule starts after this naming rule: DIGIT+DIGIT:DIGIT+DIGIT
    \s\-\s                            // space followed by dash followed by space
    (?P<ends_at>\d\d\:\d\d)           // same as starts_at group
    (?P<module_name>[^ ]*)            // capture everything until the first space
    \s\-\s                            
    (?P<module_type>[^ ]*)
    \s
    (?P<first_name>[^ ]*)
    \s
    (?P<last_name>[^ ]*)
    \s
    ([^ ]*)
    \s
    (?P<room>[A-Z]{2,3}\d\d)         // capture 2-3 letters + next two digits 
    (?P<weeks>\d-\d{1,2})            
)\s?                                 // capture everything in this BIG GROUP multiple times (this is for exception rules you added later)

