大写基数方向,R中的所有其他内容均使用标题大写

时间:2018-06-26 18:30:08

标签: r regex case-sensitive uppercase stringr

我有一个大写的地址列表。我想转换为标题大小写,但保留基本方向的大写字母,例如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

3 个答案:

答案 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创建。