LINUX.ORG.RU

[HaskelЪ] Как разбить строку?


0

0
Есть строка "qw%q2&&d43+cv43" нужно получить ["qw", "%", "q2", "&&", "d43", "+", "cv43"].

Смотрел в начале на splitRegex, но функция выкидывает разделители. Хотелось бы что-то типа splitRegexWithMatches. Короче, как сделать?

anonymous
Prelude Data.List> groupBy (\x y -> not $ (y `elem` "%&+") /= (x `elem` "%&+")) "qw%q2&&d43"
["qw","%","q2","&&","d43"]
pierre
()
> Есть строка "qw%q2&&d43+cv43" нужно получить ["qw", "%", "q2", "&&", "d43", "+", "cv43"].

И по какому принципу ты собираешься ее разбивать? Я вот закономерности вообще не вижу.

anonymous
()
Ответ на: комментарий от anonymous
> И по какому принципу ты собираешься ее разбивать? Я вот закономерности вообще не вижу.

кажется, по лексемам.

топикстартеру смотреть функцию lex

Joe_Bishop
()
А вобще если там всякие разные разделители, может быть уже пора брать parsec.
pierre
()
Ответ на: комментарий от anonymous
> И по какому принципу ты собираешься ее разбивать? Я вот закономерности вообще не вижу.

Есть набор разделителей % && + и д.р. выходной список - это список самих разделителей и фрагментов исходной стоки, которые между ними находятся, в порядке их следования в исходной строке.

anonymous
()
Ответ на: комментарий от anonymous
А мой код что, не прокатил? :-) lex читает хаскельные лексемы, не уверен что подойдет для таких извратных разделителей
pierre
()
Ответ на: комментарий от pierre
> Из всего что я знаю это самый элегантный split

Мда... Я ж таким все начальство распугаю! :)

А, что там про parsec?

anonymous
()
Не такой красивый как выше, но тоже вариант:

split :: String -> String -> [String]
split _ [] = []
split d s = w : w' : split d s''
    where
        (w, s') = break (`elem` d) s
        (w', s'') = break (`notElem` d) s'
anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.