Есть ли метод "запускается с" в pyparsing - PullRequest
3 голосов
/ 28 сентября 2011

Эй, я написал очень простой парсер с pyparsing, который обнаруживает некоторые токены в тексте и затем заменяет их другой строкой.Проблема в том, что сейчас мой код работает только с точными совпадениями.Я хотел бы также обнаружить частичные совпадения.Например, если токеном является «foobar», я бы хотел сопоставить слово «foobarfoo».Есть ли способ сделать это с pyparsing?Я посмотрел примеры и провел некоторое исследование, но ничего не нашел.

Спасибо

РЕДАКТИРОВАТЬ:

У меня есть список токенов и списокслова в тексте.Поэтому я хочу решение, которое учитывает этот факт.Список токенов может быть довольно большим.

Ответы [ 2 ]

3 голосов
/ 28 сентября 2011

Простейшим было бы использование выражения регулярного выражения в вашей грамматике:

startsWithFoobar = Regex(r"foobar[a-zA-Z0-9_]+")
3 голосов
/ 28 сентября 2011

Literal('foobar')+Word(pyp.alphas) определяет выражение ParseExparsing, которое требует, чтобы текст начинался с 'foobar', за которым следует любой символ альфа-символа. Например:

import pyparsing as pyp
ident = pyp.Combine(pyp.Literal('foobar')+pyp.Word(pyp.alphas))('foo')
for match in ident.searchString('bar foobarfoo bar foobarbafoo'):
    print(match.foo)

выходы

foobarfoo
foobarbafoo
...