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

时间:2011-02-25 02:08:51

标签: python pyparsing

我正在努力学习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 个答案:

答案 0 :(得分: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