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

Python pyparsing:提取包含特定文本的字符串,python,pyparsing,Python,Pyparsing,我正在努力学习语法分析。这听起来很有希望,而且用于文本处理也很有趣。无论如何,我的问题是: 我有一份课程名称清单。比如说, courselist = ["Project Based CALC", "CALCULUS I", "Calculus II", "Intermediate MICRO", "Intermediate CALCULUS advance", "UNIVERSITY P

我正在努力学习语法分析。这听起来很有希望,而且用于文本处理也很有趣。无论如何,我的问题是:

我有一份课程名称清单。比如说,

courselist = ["Project Based CALC",
           "CALCULUS I",
           "Calculus II",
           "Intermediate MICRO",
           "Intermediate CALCULUS advance",
           "UNIVERSITY PHYSICS"]
我想从上面的列表中提取与微积分有关的课程。这些课程要么有完整的单词演算,要么有缩写CALC。首先,假设这些单词只出现在大写字母中(在上面的例子中有一个字母是小写的;让我们暂时忽略它)

我编写了以下代码:

import pyparsing as pp

calc = pp.Literal("CALC")
for entry in courselist:
    if len(calc.searchString(entry)) >= 1:
        print entry
    else:
        pass
我的第一个问题是,是否有更好的方法使用pyparsing来实现这一点

现在,上面的代码忽略了演算II。我知道我可以通过将
calc
定义为:

calc = pp.Literal("CALC") | pp.Literal("Calc")
但这将错过
cAlc
。是否有办法指定语法,以便CALC中的所有小写和大写字母都匹配

谢谢你的帮助

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

伟大的感谢您的回答。您可以在pyparsing wiki(pyparsing.wikispaces.com)上找到大量文档/文章链接,SourceForge的源发行版中包含UML图、htmldoc和示例。你也可以花10美元从O'Reilly那里买到这本电子书。