2017-01-13 2 views
3

У меня есть пользовательский текст ввода, например «abc, def, ghi». Я хочу проанализировать его, чтобы получить список строк как ["abc", "def"].fparsec для разбора последовательности строк

Я попытался

let str : Parser<_> = many1Chars (noneOf ",") 
let listParser : Parser<_> = many (str);; 

, но она всегда дает мне первый пункт только [ "ABC"]. «Def» и другие не входят в список результатов.

ответ

3

Вы разобрались до первой запятой, но не разобрали запятую.

Чтобы разобрать список вещей, разделенных другими вещами, используйте sepBy:

let comma = pstring "," 
let listParser = sepBy str comma 

Если вам нужно разобрать «по крайней мере один», используйте sepBy1 вместо этого.

Смежные вопросы