Parsec как найти «совпадения» внутри строки

Как я могу использовать parsec, чтобы проанализировать все совпадающие входные данные в строке и отбросить остальные?

Пример: у меня есть простой анализатор чисел, и я могу найти все числа, если я знаю, что их разделяет:

num :: Parser Int
num = read <
num :: Parser Int
num = read <$> many digit

parse (num `sepBy` space) "" "111 4 22"
gt; many digit parse (num `sepBy` space) "" "111 4 22"

Но что, если я не знаю, что находится между числами?

"I will live to be 111 years <b>old</b> if I work out 4 days a week starting at 22."

many anyChar не работает как разделитель, потому что он потребляет все.

Итак, как я могу получить вещи, которые соответствуют произвольному парсеру, окруженные вещами, которые я хочу игнорировать?

РЕДАКТИРОВАТЬОбратите внимание, что в реальной проблеме мой синтаксический анализатор является более сложным:

optionTag :: Parser Fragment
optionTag = do
    string "<option"
    manyTill anyChar (string "value=")
    n <- many1 digit
    manyTill anyChar (char '>')
    chapterPrefix
    text <- many1 (noneOf "<>")
    return $ Option (read n) text
  where
    chapterPrefix = many digit >> char '.' >> many space

Ответы на вопрос(0)

Ваш ответ на вопрос