Удаление двух символов из строки

Связанный вопрос здесь.

Итак, у меня есть вектор символов со значениями валюты, которые содержат как знаки доллара, так и запятые. Тем не менее, я хочу попытаться удалить запятые и знаки доллара на одном шаге.

Это удаляет знаки доллара =

d = c("$0.00", "$10,598.90", "$13,082.47")
gsub('\\$', '', d)

Это удаляет запятые =

library(stringr)
str_replace_all(c("10,0","tat,y"), fixed(c(","), "")

Мне интересно, могу ли я удалить обоих персонажей за один шаг.

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


person ATMathew    schedule 04.07.2012    source источник
comment
Я не эксперт по регулярным выражениям, но, может быть, gsub('\\$|,', '', d)?   -  person joran    schedule 05.07.2012


Ответы (2)


Так как отвечать в комментариях плохо:

gsub('\\$|,', '', d)

заменяет либо $, либо (|) , пустой строкой.

person joran    schedule 05.07.2012
comment
зачем двойная косая черта? @joran - person Demo; 31.01.2017
comment
@WhiteBig $ — это специальный символ в регулярных выражениях, и его нужно экранировать. Вы можете прочитать об этом через ?regex. - person joran; 31.01.2017
comment
@WhiteBig Типа. Просто \ сам по себе является специальным символом, поэтому его тоже нужно экранировать. Таким образом, вы экранируете $: \$, но тогда \ также нужно экранировать, так что вы получите \\$. - person joran; 31.01.2017
comment
понял, можем ли мы поставить одну обратную косую черту перед $ и отдельно? - person Demo; 31.01.2017
comment
@WhiteBig Нет. У $ должно быть два, а у , ничего не нужно (не специальный символ). - person joran; 31.01.2017

взгляните на ?regexp для дополнительной специальной записи регулярных выражений:

> gsub('[[:punct:]]', '', d)
[1] "000"     "1059890" "1308247"
person Justin    schedule 04.07.2012
comment
Я думаю, что это также удалит десятичную точку, что, похоже, не то, что хотел ОП. Ответ @ joran выше, кажется, делает это точно, не заходя слишком далеко. - person thelatemail; 05.07.2012
comment
@thelatemail вы правы! Я не должен отвечать на вопросы, когда вокруг есть текила! ответ, который дал Джоран, намного лучше. - person Justin; 05.07.2012