r - 如何结合 sprintf(%s) 在 R 中合并正则表达式?
问题描述
我正在使用我发现的一些旧代码来获取字符串(例如:)
[1] "Indianapolis, IN" "Columbia, TN" "Chicago, IL" "Next door to Florida Man"
[5] "Holeintheroad, TN" "RUCH 11 LISTOPADA"
并找出其中有州缩写的。我有以下内容:
user_info$location[user_info$location!=""&!is.na(user_info$location)] %>%
str_match(sprintf("(%s)",paste(state.abb,collapse="|"))) %>%
.[,2] %>%
table() %>%
broom::tidy() %>%
set_names(c("NAME","n")) %>%
as.data.frame() -> tweet_states_abbr
其中 datasets::state.abb 是:
[1] "AL" "AK" "AZ" "AR" "CA" "CO" "CT" "DE" "FL" "GA" "HI" "ID" "IL" "IN" "IA" "KS" "KY" "LA" "ME" "MD" "MA" "MI" "MN" "MS"
[25] "MO" "MT" "NE" "NV" "NH" "NJ" "NM" "NY" "NC" "ND" "OH" "OK" "OR" "PA" "RI" "SC" "SD" "TN" "TX" "UT" "VT" "VA" "WA" "WV"
[49] "WI" "WY"
问题是 str_match() 获取了太多信息——除了诸如“IN”或“CA”之类的实际状态缩写之外,它还获取了部分单词(例如:在“MAGA”中,它获取了“MA”或“GA”)。我知道正则表达式可以解决这个问题,但我不确定如何将它们与 sprintf 和 %s 合并到这里,因为它们不是原生 R——所以我不确定在哪里放置 \b 或 \s。有什么建议吗?谢谢!
解决方案
您只需要确保州缩写被单词边界标记包围,\\b
.
TestData = c("Indianapolis, IN", "Columbia, TN", "Chicago, IL",
"Next door to Florida Man", "Holeintheroad, TN", "RUCH 11 LISTOPADA",
"MAGA")
StatePat = paste("\\b(", paste(datasets::state.abb, collapse="|"), ")\\b", sep="")
grep(StatePat, TestData, value=T)
[1] "Indianapolis, IN" "Columbia, TN" "Chicago, IL" "Holeintheroad, TN"
推荐阅读
- c# - 为什么建议中间件在 ASP.NET Core 中异步?
- c# - 重复登录禁令问题(Selenium C#)
- reactjs - Redux 动作中的多种类型
- javascript - 在我的 Redux 应用程序中处理错误的代码中添加什么?
- popup - 如何使用 Leaflet 关闭多个弹出窗口?
- c++ - 在原子中编译但不是终端
- python - 在 Google Colab 中运行
- firebase - 如何在托管 Firebase.Json 的 Firebase 中进行 url 重写
- sql - 使用 GROUPBY 对 Bytea 进行逻辑或
- browser - 如何在单个图像中从浏览器截取整个网页的屏幕截图