Я пытаюсь разбить строку, используя функцию "split-string", основанную на. персонаж. Но
(split-string "1.2.3" ".")
не работает вообще. Он просто возвращает список переменных количества пустых строк. Является. специальный символ, который должен быть экранирован или определен каким-то другим способом?
Elisp для разделения строки. персонаж
Ответ 1
Вот официальная документация для функции split-string - http://www.gnu.org/software/emacs/manual/html_mono/elisp.html#Creating-Strings.
Второй аргумент функции split-string в (split-string "1.2.3" "\.")
является регулярным выражением и, как результат, и '.' характер и символ "\" имеют особое значение. Итак '.' символ должен быть экранирован, и даже символ "\" должен быть экранирован другим "\" . (split-string "1.2.3" "\\.")
будет работать нормально, как ожидалось.
Ответ 2
Если вы вызываете describe-function
on split-string
, обычно, нажимая F1 f split-string
Enter, вы можете видеть в документации, что второй параметр - это не просто символ, а обычный выражение:
Если SEPARATORS не равен нулю, это должно быть регулярное выражение, соответствующее тексту, которое разделяет, но не является частью подстрок. Если nil по умолчанию имеет разделители-разделители по умолчанию, обычно "[\ f\t\n\r\v] +", а OMIT-NULLS принудительно t.
В то время как для большинства простых строковых операций достаточно встроенных функций Emacs, когда вы сильно используете строковые манипуляции в коде Elisp, s.el
, партийная библиотека является незаменимой. Вы можете установить его через менеджер пакетов Emacs, выполнив команду package-install
с s
в качестве имени пакета. Предположим, у вас есть несколько функций для нескольких модулей, которые все что-то делают со строками, объединяют, разделяют, капитализируют, сравнивают, обрезают пробелы и т.д. Имеет смысл иметь все связанные с строкой функции под общим пространством имен, поэтому s.el
, альтернативный встроенному split-string
, будет s-split
:
(s-split "\\." "1.2.3") ; ("1" "2" "3")
Например, если вам нужно преобразовать строку " 1-2-3 "
в "3.2.1"
, вы можете написать:
(s-reverse (s-join "." (s-split "-" (s-trim z))))