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