R: Capitalizing everything after a certain character
capitalization, r, regex
Solution
You were very close:
gsub("(_.*)","\\U\\1",x,perl=TRUE)
seems to work. You just needed to use `_.*` (underscore followed by zero or more other characters) rather than `_*` (zero or more underscores) ...
To take this apart a bit more:
- `_.*` gives a regular expression pattern that matches an underscore `_` followed by any number (including 0) of additional characters; `.` denotes "any character" and `*` denotes "zero or more repeats of the previous element"
- surrounding this regular expression with parentheses `()` denotes that it is a pattern we want to store
- `\\1` in the replacement string says "insert the contents of the first matched pattern", i.e. whatever matched `_.*`
- `\\U`, in conjunction with `perl=TRUE`, says "put what follows in upper case" (uppercasing `_` has no effect; if we wanted to capitalize everything after (for example) a lower-case g, we would need to exclude the g from the stored pattern and include it in the replacement pattern: `gsub("g(.*)","g\\U\\1",x,perl=TRUE)`)
For more details, search for "replacement" and "capitalizing" in `?gsub` (and `?regexp` for general information about regular expressions)
Problem
I would like to capitalize everything in a character vector that comes after the first `_`. For example the following vector: ``` x <- c("NYC_23df", "BOS_3_rb", "mgh_3_3_f") ``` Should come out like this: ``` "NYC_23DF" "BOS_3_RB" "mgh_3_3_F" ``` I have been trying to play with regular expressions, but am not able to do this. Any suggestions would be appreciated.