pyparsing: извлечение строк, содержащих определенный текст - PullRequest
1 голос
/ 25 февраля 2011

Я пытаюсь выучить 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 голосов
/ 25 февраля 2011
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
...