逐行输出 Python 正则表达式

Line By Line output Python Regex

我正在尝试使用一些正则表达式匹配找出使输出与 python 匹配的最佳方法。这是一个示例文本。

Student ID: EDITED Sex: TRUCK

<<Fall 2016: 20160822 to 2

Rpt Dup

CRIJ    3310 Foundtns of Criminal Justice           3 A         


COMM    3315 Leadership Communication               3 B         


ENGL    3430 Professional Writing                   4 A         


<<Spring 2017: 20170117 to 20170512  () >>


MKTG    3303 Principles of Marketing                3 B         

<<Summer 2017: 20170515 to 20170809  () >>


HUMA    4300 Selected Topics in Humanities          3           


<<Fall 2017: 20170828 to 20171215  () >>

HUMA    4317 The Modern Era                         3           


COMM 

4314 Intercultrl Communicatn                3      
(((IT REPEATS THE SAME TYPE OF TEXT BUT WITH A DIFFERENT STUDENT BELOW)))

这是一些代码:

import re
term_match = re.findall(r'^<<.*', filename, re.M)
course_match = re.findall(r'^[A-Z]{2,7}.*', filename, re.M

print('\n'.join(term_match))
print('\n'.join(course_match))

我有一个正则表达式来匹配学生 ID 和课程信息,我的问题是让它们逐行输出。文档上有多个学生有很多课程作业,所以仅仅匹配是不够的。我需要匹配 ID,打印以下课程作业匹配项,然后在到达该行时打印下一个 ID 和课程作业。任何关于如何实现这样的事情的帮助都会很棒!

标志 re.MULTILINE 将使正则表达式跨越多行。

也就是说,您最好逐行循环并识别何时遇到每个新学生 ID:

student_id = ''
for line in s.splitlines(False):
    if not line:
        continue
    elif line.startswith('STUDENT'):
        student_id = line[7:].strip()
    else:
        print(student_id, line)

另一个想法,您可以通过将文本分成块(每个学生 ID 一个)来简化问题:

starts = [mo.start() for mo in re.finditer(r'^STUDENT ID(.*)$', s, re.MULTILINE)]
starts.append(len(s))

chunks = []
for begin, end in zip(starts, starts[1:]):
    chunks.append(s[begin:end])

之后,为每个学生隔离课程应该容易得多:-)