I have vector of strings containing numbers. Within these strings, I would like to remove all access zeros behind the decimal separator. So I tried mutate_all(funs(str_replace(., ".00", ""))).
This works for the first number in my vector:
v <- c("bla 500.00", "bla 1.20", "bla 1.10", "bla 2.34").
For the rest I would not like to hard code mutate_all(funs(str_replace(., ".10", ".1")))%>%mutate_all(funs(str_replace(., ".20", ".2")))%>% ..., but use some kind of smart regex, which automatically does the job. So, removing every zero which is behind ".non-zero-integer" (dot non-zero-integer), while keeping the ".non-zero-integer" the same.
You could try to find:
\b(\d+)(?:\.0+|(\.\d+?))0*\b
And replace with \1\2. See an online demo
\b - Word-boundary;(\d+) - Capture trailing digits upto;(?: - Open a non-capture group;
\.0+ - 1+ zero's;| - Or;(\.\d+?) - A nested 2nd capture group to match a dot followed by a digit and 0+ (lazy) digits;) - Close non-capture group;0* - 0+ (greedy) digits;\b - Trailing word-boundary.library(stringr)
v <- c("bla 500.00", "bla 1.20", "bla 1.10", "bla 2.34", "bla 2.340003", "bla 1.032", "bla 1.10 bla 2.00")
v <- str_replace_all(v, "\\b(\\d+)(?:\\.0+|(\\.\\d+?))0*\\b", "\\1\\2")
v
Prints: "bla 500", "bla 1.2", "bla 1.1", "bla 2.34", "bla 2.340003", "bla 1.032", "bla 1.1 bla 2"