python - 在Python中使用正则表达式搜索从PDF转换的类(class)

标签 python regex

我正在用 Python 编写正则表达式来搜索 txt 文档中的字符串。我正在寻找的字符串如下所示:

  1. ACCT 221 会计原理 II (3) 先决条件:ACCT 220
  2. ASTD 485 东亚研究问题 (3)(旨在作为学生最后 15 个学分的最终顶点类(class)。)先决条件:ASTD 284(或 ASTD 150)和 285(或 ASTD 160) .
  3. ASTR 100 天文学概论 (3)(不向已修读或正在修读编号为 250 或更高的任何天文学类(class)的学生开放。对于非主修或辅修科学的学生。)先决条件:MATH 012 或更高版本.
  4. ASTD 380 美国与中国和日本的关系:1740 年至今 (3)(满足社会科学的通识教育要求。)从美国与中国和日本的政治、经济和文化关系研究美国殖民时代到现代......

我想要表达式找到的是以类(class)代码 开头的字符串,即ACCT 221 并以包含先决条件的句子结尾。在某些情况下,不会有先决条件语句,如示例 4 所示。

这是我到目前为止所拥有的:

[A-Z]{4} \d{3}(?:(?![A-Z]{4}).){4,100} \(\d\).*?\.(?!\))

这适用于示例 1 和 2,但不适用于示例 3(我实际上添加了 (?!\)) 来捕获示例 2 等实例中的内容,但没有意识到存在多个句子,因此括号内有句号)。

我认为我正在寻找的是一种搜索字符串的方法,该字符串以我编写的表达式开头 \(\d\) 并以句点结束在括号内,无论这些括号在哪里。我尝试将 .* 添加到最后的否定前瞻中,但这不起作用。我尝试添加 .*? 以使其非贪婪,这样它就不会返回从第一个类(class)代码开始的整个文件,但这没有什么区别。

我觉得我在这里错过了一些非常简单的东西。预先感谢您的帮助。

如果我需要澄清任何事情,请告诉我。

最佳答案

使用两个正则表达式来获得更简单的正则表达式并没有什么问题:

import re

text = '''\
ACCT 221 Principles of Accounting II (3) Prerequisite: ACCT 220
ASTD 485 Issues in East Asian Studies (3) (Intended as a final capstone course to be taken in a student's last 15 credits.) Prerequisites: ASTD 284 (or ASTD 150) and 285 (or ASTD 160).
ASTR 100 Introduction to Astronomy (3) (Not open to students who have taken or are taking any astronomy course numbered 250 or higher. For students not majoring or minoring in a science.) Prerequisite: MATH 012 or higher.
ASTD 380 American Relations with China and Japan: 1740 to Present (3) (Fulfills the general education requirement in the social sciences.) A study of American political, economic, and cultural relations with China and Japan from the American colonial era to modern times'''

courses={}
for line in text.splitlines():
    course=re.match(r'([A-Z]{4}\s+\d{3})', line).group(1)
    m=re.search(r'Prerequisites?:\s*(.*)', line)
    if m:
        pre=m.group(1)
    else:
        pre='None'    
    courses[course]=pre

print 'COURSE\t\tPREREQUISITE'    

for course in sorted(courses.keys()):
    print '{}\t{}'.format(course, courses[course]) 

打印:

COURSE      PREREQUISITE
ACCT 221    ACCT 220
ASTD 380    None
ASTD 485    ASTD 284 (or ASTD 150) and 285 (or ASTD 160).
ASTR 100    MATH 012 or higher.

关于python - 在Python中使用正则表达式搜索从PDF转换的类(class),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20894208/

相关文章:

python - 创建 Django JSONField 值的副本

python 输入被读取错误?

javascript - HTML5 日期验证

java - 正则表达式匹配不被空格包围

javascript - 在 javascript 字符串搜索中查找整个单词而不是单词的一部分

python - 如何获取给定x对应的直方图P(x)的条形高度?

python - 有没有一种实用的方法可以做到这一点?

python - 使用公式将行添加到数据框

c++ - C++ 11 中的正则表达式

regex - 使用 Matcher 提取子字符串 : java. lang.IllegalStateException:未找到匹配项