pyparsing:提取包含特定文本的字符串

1 投票
1 回答
885 浏览
提问于 2025-04-16 12:30

我正在学习pyparsing。这听起来很不错,而且在处理文本时会很有趣。不过,我有一个问题:

我有一份课程名称的列表。例如:

courselist = ["Project Based CALC",
           "CALCULUS I",
           "Calculus II",
           "Intermediate MICRO",
           "Intermediate CALCULUS advance",
           "UNIVERSITY PHYSICS"]

我想从上面的列表中提取与微积分相关的课程。这些课程的名称要么是完整的“CALCULUS”,要么是缩写“CALC”。首先,假设这些词都是大写的(上面的例子中有一个是小写的,我们暂时不考虑它)。

我写了以下代码:

import pyparsing as pp

calc = pp.Literal("CALC")
for entry in courselist:
    if len(calc.searchString(entry)) >= 1:
        print entry
    else:
        pass

我第一个问题是,使用pyparsing有没有更好的方法来做到这一点?

现在,上面的代码漏掉了Calculus II。我知道我可以通过将calc定义为:

calc = pp.Literal("CALC") | pp.Literal("Calc")

但是这样会漏掉cAlc。有没有办法指定语法,使得“CALC”中的所有大小写字母都能匹配到?

谢谢你的帮助。

1 个回答

2
calc = pp.CaselessLiteral('calc')
for entry in courselist:
    if calc.searchString(entry, 1):
        print entry

这个效果和下面的内容差不多:

for entry in courselist:
    if 'calc' in entry.lower():
        print entry

撰写回答