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 ответ

Решение
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
Другие вопросы по тегам