逐行输出 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])
之后,为每个学生隔离课程应该容易得多:-)
我正在尝试使用一些正则表达式匹配找出使输出与 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])
之后,为每个学生隔离课程应该容易得多:-)