2011-02-25 83 views
1

我想學習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中的所有大小寫字母匹配。

謝謝你的幫助。

+0

你會發現一些在pyparsing維基(pyparsing.wikispaces.com)文檔/文章鏈接,和UML圖,HTMLDOC和示例包含在SourceForge的源代碼分發中。您還可以10美元從O'Reilly購買電子書。 – PaulMcG 2011-02-25 04:44:35

回答

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 
+0

太棒了!感謝你的回答。 – Curious2learn 2011-02-25 02:42:42

相關問題