我有一个大写的地址列表。我想转换为标题大小写,但保留基本方向的大写字母,例如NE,NW,SE,SW。
address <- c("14615 SE CREEKSIDE DRIVE")
stringr::str_to_title(address)
# this returns
14615 Se Creekside Drive
# desired result
14615 SE Creekside Drive
答案 0 :(得分:2)
您可以先转换为大写字母,然后再将基本方向转换回大写字母。例如:
address = stringr::str_to_title(address)
address = gsub("( [NS])([ew] )", "\\1\\U\\2" , address, perl=TRUE)
答案 1 :(得分:2)
尝试:
> gsub("\\b([A-Z])(\\w{2,})", "\\1\\L\\2" , "14615 SE CREEKSIDE DRIVE", perl=true)
[1] "14615 SE Creekside Drive"
正则表达式细目:
\b
匹配单词边界([A-Z])
匹配大写字母(\w{2,})
匹配两个以上的单词字符答案 2 :(得分:2)
使用str_replace
,您可以转换回基本方向。包括空格以避免基数出现在名称中,但是如果空格以外的其他内容可能将其包围,则必须对其进行修改。
library(stringr)
addresses <- c("14615 SE CREEKSIDE DRIVE", "14615 NW CREEKSIDE DRIVE", "14615 SE SEASIDE DRIVE", "14615 SE TANWELL DRIVE")
addresses %>%
str_to_title %>%
str_replace(" (N|S)(e) ", " \\1E ") %>%
str_replace(" (N|S)(w) ", " \\1W ")
#> [1] "14615 SE Creekside Drive" "14615 NW Creekside Drive"
#> [3] "14615 SE Seaside Drive" "14615 SE Tanwell Drive"
由reprex package(v0.2.0)于2018-06-26创建。