Five days of text processing. How does regex feel now that you've seen it in small pieces instead of one big dump?
Manageable. Each day was one function — search, then findall, then sub. I never had to hold the whole regex world in my head at once.
That's the point of splitting the regex intro across three days. Pattern detection, pattern extraction, pattern replacement — three tasks, three tools. Let's see what stuck before you move into aggregation next week.
Is the quiz mostly regex syntax or more on when to use each tool?
Both. You need to know what \b, \d{1,3}, and the (?:...) group do. You also need to know why we reach for split() before regex and when re.search beats re.match. The decision tree matters as much as the syntax.
This week you built five composable text-processing functions:
parse_log_line — two-pass split with maxsplit to protect the messagefilter_by_level — list comprehension + space-padded membershiphas_error_code — re.search + \b word boundaries for presence checksextract_ip_addresses — re.findall + set + sorted to dedupe and orderredact_ips — re.sub with a non-capturing group to scrub sensitive dataMeta-pattern: split → search → findall → sub. Three regex verbs on top of str.split handle almost any text job.
Five days of text processing. How does regex feel now that you've seen it in small pieces instead of one big dump?
Manageable. Each day was one function — search, then findall, then sub. I never had to hold the whole regex world in my head at once.
That's the point of splitting the regex intro across three days. Pattern detection, pattern extraction, pattern replacement — three tasks, three tools. Let's see what stuck before you move into aggregation next week.
Is the quiz mostly regex syntax or more on when to use each tool?
Both. You need to know what \b, \d{1,3}, and the (?:...) group do. You also need to know why we reach for split() before regex and when re.search beats re.match. The decision tree matters as much as the syntax.
This week you built five composable text-processing functions:
parse_log_line — two-pass split with maxsplit to protect the messagefilter_by_level — list comprehension + space-padded membershiphas_error_code — re.search + \b word boundaries for presence checksextract_ip_addresses — re.findall + set + sorted to dedupe and orderredact_ips — re.sub with a non-capturing group to scrub sensitive dataMeta-pattern: split → search → findall → sub. Three regex verbs on top of str.split handle almost any text job.