Как разбить строку в эликсире с разделителями? - PullRequest
0 голосов
/ 20 сентября 2019

У меня есть строка со специальными символами:

>> text = "ab()-cdef"

Я хочу отделить буквы от специальных символов в списке

>> list = ["ab", "(" , ")" ,"-", "cdef"]

Я пробовал с

list = String.split(text,["(",")","-"], trim: false)

Но я теряю специальные символы

list = ["ab","","","","cdef"]

Ответы [ 2 ]

0 голосов
/ 20 сентября 2019

Вы были почти там.Используйте lookarounds , чтобы разбить строку на не буквы.

String.split "ab()-cdef", ~r/(?<=\W)|(?=\W)/
#⇒ ["ab", "(", ")", "-", "cdef"]
0 голосов
/ 20 сентября 2019

Я использовал Regex.scan/2.

~r{\(|\)|-|[a-z]*}
|> Regex.scan("ab()-cdef")
|> List.flatten()
|> Enum.filter(fn s -> String.length(s) > 0 end)

Мне пришлось экранировать некоторые специальные символы - например, ( стал \( - и разделять специальные символы с помощью каналов.

...