2011-02-25 4 views
1

J'essaie d'apprendre le pyparage. Cela semble prometteur et quelque chose qui serait amusant à utiliser pour le traitement de texte. De toute façon, voici ma question:pyparsing: extraction de chaînes contenant du texte spécifique

J'ai une liste de noms de cours. Par exemple,

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

Je souhaite extraire des cours d'une liste telle que ci-dessus concernant le calcul. Ce sont soit des cours qui ont le mot complet CALCULUS ou l'abréviation CALC. D'abord, supposons que ces mots n'apparaissent qu'en majuscule (il y en a un en minuscule dans l'exemple ci-dessus, ignorons cela pour l'instant).

J'ai écrit le code suivant:

import pyparsing as pp 

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

Ma première question est de savoir s'il y a une meilleure façon de le faire en utilisant pyparsing?

Maintenant ce qui précède manque Calculus II. Je sais que je peux attraper ce en définissant calc comme:

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

Mais cela va me manquer cAlc. Est-il possible de spécifier la grammaire de telle sorte que toutes les lettres majuscules et minuscules dans CALC soient appariées.

Nous vous remercions de votre aide.

+0

Vous trouverez un certain nombre de liens documentation/article sur le wiki pyparsing (pyparsing.wikispaces.com) et des diagrammes UML, et les exemples sont htmldoc inclus dans la distribution source de SourceForge. Vous pouvez également prendre le livre numérique d'O'Reilly pour 10 $. – PaulMcG

Répondre

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

L'effet est similaire à:

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

Génial! Merci d'avoir répondu. – Curious2learn

Questions connexes