Clojure: как использовать re-seq для возврата списка только буквенно-цифровых символов в виде отдельных строк - PullRequest
0 голосов
/ 23 февраля 2019

Я пытаюсь разобрать ввод пользователя для игры Clojure.Я хотел бы взять любую строку пользовательского ввода и превратить каждый буквенно-цифровой символ в свою собственную строку, а затем вернуть список всех этих строк, игнорируя пробелы и разделители.Ниже показано, что я пытаюсь выполнить:

(characters-as-strings "a   b")
; => ("a" "b")

(characters-as-strings "a   c,b")
; => ("a" "c" "b")

Я пытался (defn characters-as-strings [userInput] re-seq #"[A-Z][a-z]" userInput), но это только возвращает фактическую строку "a b".Какой лучший способ сделать это?

Ответы [ 3 ]

0 голосов
/ 23 февраля 2019

если хотите, можете использовать |в регулярных выражениях.

(defn characters-as-strings [input-string]
  (filter #(pos? (count % )) (clojure.string/split input-string #"\s|,"))
  )

  (characters-as-strings "a   b") =>("a" "b")
  (characters-as-strings "a   c,b") => ("a" "c" "b")
0 голосов
/ 23 февраля 2019

, хотя принятый ответ решает подкласс проблемы, тем не менее он обрабатывает только латинские буквы, в то время как полное решение для обработки буквенно-цифровых символов, включая буквы Юникод, может выглядеть примерно так:

user> (re-seq #"\p{IsAlphabetic}|[0-9]" "a --- , ..b c ,de 1 22 ฆ й ζ")
;;=> ("a" "b" "c" "d" "e" "1" "2" "2" "ฆ" "й" "ζ")
0 голосов
/ 23 февраля 2019

Вы были действительно близко.Я только обновил регулярное выражение:

(defn characters-as-strings [input]
  (re-seq #"[a-zA-Z]" input))

;; (characters-as-strings "a   b") ;; => ("a" "b") 
;; (characters-as-strings "a   c,b") ;; => ("a" "c" "b")

Единственное изменение состояло в том, чтобы поместить все нужные символы в один и тот же класс регулярного выражения (например, "любой символ в нижнем или верхнем регистре" ).Ваша версия была «один символ в верхнем регистре и один символ в нижнем регистре» .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...