Удаление символов после символа ЕВРО в R

У меня есть символ евро, сохраненный в переменной "евро":

euro <- "\u20AC"
euro
#[1] "€"

И переменная «европоиск» содержит «услуги, как определено в этом ТЗ, по цене 15 896,80 евро (если они выполняются для» .

eurosearch
[1] "services as defined in this SOW at a price of € 15,896.80 (if executed fro"

Мне нужны символы после символа евро, который равен «15 896,80 (если выполняется здесь», я использую этот код:

gsub("^.*[euro]","",eurosearch)

Но я получаю пустой результат. Как я могу получить ожидаемый результат?


person Shivpe_R    schedule 08.07.2015    source источник
comment
Вы хотите, чтобы в результате было выведено 15,896.80 (if executed fro? Или 15,896.80?   -  person Wiktor Stribiżew    schedule 08.07.2015
comment
Мне нужно € 15 896,80, но с использованием переменной, в этом случае это € , в следующий раз это может быть $, который будет сохранен в переменной «евро».   -  person Shivpe_R    schedule 08.07.2015


Ответы (2)


Вы можете использовать переменные в шаблоне, просто объединяя строки с помощью вставить0:

euro <- "€"
eurosearch <- "services as defined in this SOW at a price of € 15,896.80 (if executed fro"
sub(paste0("^.*", gsub("([^A-Za-z_0-9])", "\\\\\\1", euro), "\\s*(\\S+).*"), "\\1", eurosearch)

euro <- "$"
eurosearch <- "services as defined in this SOW at a price of $ 25,196.4 (if executed fro"
sub(paste0("^.*", gsub("([^A-Za-z_0-9])", "\\\\\\1", euro), "\\s*(\\S+).*"), "\\1", eurosearch)

См. демонстрацию CodingGround.

Обратите внимание, что с помощью gsub("([^A-Za-z_0-9])", "\\\\\\1", euro) я избегаю любых символов, отличных от слов, чтобы $ можно было рассматривать как литерал, а не как специальный метасимвол регулярного выражения (взято из это сообщение SO).

person Wiktor Stribiżew    schedule 08.07.2015

Используйте регулярные совпадения, присутствующие в базе r или str_extarct в stringr и т. д.

> x <- "services as defined in this SOW at a price of € 15,896.80 (if executed fro"
> regmatches(x, regexpr("(?<=€ )\\S+", x, perl=T))
[1] "15,896.80"

или

> gsub("€ (\\S+)|.", "\\1", x)
[1] "15,896.80"

или

Использование переменных.

euro <- "\u20AC"
gsub(paste(euro , "(\\S+)|."), "\\1", x) 

Если этот ответ с использованием переменных не сработает для вас, вам нужно установить кодировку,

gsub(paste(euro , "(\\S+)|."), "\\1", `Encoding<-`(x, "UTF8"))

Источник

person Avinash Raj    schedule 08.07.2015
comment
Могу ли я использовать переменную вместо € во втором ответе, вместо прямого ввода €, я хочу, чтобы она была переменной. Предполагая, что € на этот раз сохраняется в какой-то переменной, в следующий раз это может быть $, так что!? - person Shivpe_R; 08.07.2015
comment
попробуй gsub(paste(euro , "(\\S+)|."), "\\1", x) - person Avinash Raj; 08.07.2015
comment
Однако проблема с $ состоит в том, что это метасимвол, поэтому его нужно модифицировать. - person David Arenburg; 08.07.2015
comment
Нет @Avinash Raj, значение равно null. - person Shivpe_R; 08.07.2015
comment
x <- "services as defined in this SOW at a price of € 15,896.80 (if executed fro" ; euro <- "€" ; gsub(paste(euro , "(\\S+)|."), "\\1", x) у меня отлично работает. - person David Arenburg; 08.07.2015
comment
@Avinash Raj, x <- "services as defined in this SOW at a price of $ 15,896.80 (if executed fro" euro <- "$" gsub(paste(euro , "(\\S+)|."), "\\1", Encoding‹-(x, "UTF8")) [1] поэтому я получаю нулевое значение - person Shivpe_R; 08.07.2015
comment
@Shivpe_R Я не нашел ни одного символа $ в вашем вводе. Поскольку $ — это специальный символ, его необходимо экранировать. См. мой ответ stackoverflow.com/a/31268302/3297613 на ваш предыдущий вопрос. - person Avinash Raj; 08.07.2015
comment
@AvinashRaj, хорошо, теперь я тоже могу использовать знак $, сохраняя [$] и экранируя его как специальный символ, понял, спасибо - person Shivpe_R; 08.07.2015