#regex #replace #emacs
#регулярное выражение #заменить #emacs
Вопрос:
У меня есть это выражение, которое я разобрал в Emacs:
mtcars %>%
head() %>%
select(mpg, cyl) %>%"
Я хочу заменить последнее %>%
на любое количество пробелов, которое может быть у него после, ничем. Итак, это работает:
(replace-regexp-in-string "%>% *$" "" "mtcars %>% head() %>% select(mpg, cyl) %>%")
и возвращает mtcars %>% head() %>% select(mpg, cyl)
Но то, что у меня на самом деле есть, это:
(replace-regexp-in-string "%>% *$" "" "mtcars %>%
head() %>%
select(mpg, cyl) %>%")
который возвращает замену всех %>% вместо последнего:
mtcars
head()
select(mpg, cyl)
Кто-нибудь знает, как добиться этого с помощью строки с новыми строками, а не в одной?
Ответ №1:
.
не соответствует новой строке. Сообщите регулярному выражению, что новые строки также могут предшествовать the %>%
, поэтому \1
они будут соответствовать всем предыдущим строкам:
(replace-regexp-in-string "\(\(.\|n\)*\)%>% *$" "\1" "mtcars %>%
head() %>%
select(mpg, cyl) %>%")
Комментарии:
1. Я должен задать это в отдельном вопросе, но на случай, если для вас это простая однострочная строка. Я хочу, чтобы вышеприведенное работало (что оно и делает), но всякий раз, когда в последней строке нет %>%, ее следует оставить как есть. Итак, это:
(replace-regexp-in-string "\(\(.\|n\)*\)%>% *$" "\1" "mtcars %>% head() %>% select(mpg, cyl) %>% arrange(cyl)")
не должно удалять %>%. Я попытался принудительно выполнить это, настроив регулярное выражение так, чтобы оно заменяло только%>% *$
до конца строки, но оно продолжает удалять последнее%>%
. Любая подсказка была бы отличной!2. @cimentadaj: заменить
$
(конец строки) на\'
(конец строки).