如何在 R 中获取列中段之后的每个字符?

How do I get every character after a segment in my column in R?

提问人:Antonio 提问时间:9/9/2023 更新时间:10/4/2023 访问量:47

问:

Fake City, TX Court House

我想返回:Court House

这是我从另一篇文章中得到的。我用它来提取城市部分。

gsub(",.*$", "", COLUMN$Entity)

我的直觉告诉我,“,.*$ 将不得不改变,但我不确定该把它改成什么。

我是正则表达式的新手。谢谢你们,伙计们。

R 正则表达式 数据操作

评论

1赞 TarJae 9/9/2023
我们可以用以下命令捕获逗号和 spcae:TX , [A-Z]{2}gsub("^.*, [A-Z]{2} ", "", COLUMN$Entity)

答:

1赞 jkatam 9/9/2023 #1

请尝试

# Input string
input_string <- 'Fake City, TX Court House'

# Use regular expression to extract 'Court House'
extracted_text <- gsub('.*\\,\\s\\w+\\s', '', input_string)


[1] "Court House"

1赞 LMc 9/9/2023 #2
x <- c("Fake City, TX Court House", "Fake City, TX")
sub(".*\\b[A-Z]{2}\\b\\s?", "", x)
# [1] "Court House" ""

R 具有状态缩写的内置字符向量。我们可以用它来构造一个正则表达式,以拆分状态缩写上的字符串,并在它之后取所有内容。

library(stringr)

x <- c("Fake City, TX Court House",
       "Fake City, OK Court House",
       "Fake City, PA",
       "CArlsbad, CA Court House")

str_split_i(x, str_c("\\b", state.abb, "\\b\\s", collapse = "|"), 2)
# [1] "Court House" "Court House" NA            "Court House"

这就是正则表达式的样子(“匹配单词'AL'后跟空格或单词'AK'后跟空格...”):

str_c("\\b", state.abb, "\\b\\s", collapse = "|")
"\\bAL\\b\\s|\\bAK\\b\\s|\\bAZ\\b\\s|\\bAR\\b\\s|\\bCA\\b\\s|\\bCO\\b\\s|\\bCT\\b\\s|\\bDE\\b\\s|\\bFL\\b\\s|\\bGA\\b\\s|\\bHI\\b\\s|\\bID\\b\\s|\\bIL\\b\\s|\\bIN\\b\\s|\\bIA\\b\\s|\\bKS\\b\\s|\\bKY\\b\\s|\\bLA\\b\\s|\\bME\\b\\s|\\bMD\\b\\s|\\bMA\\b\\s|\\bMI\\b\\s|\\bMN\\b\\s|\\bMS\\b\\s|\\bMO\\b\\s|\\bMT\\b\\s|\\bNE\\b\\s|\\bNV\\b\\s|\\bNH\\b\\s|\\bNJ\\b\\s|\\bNM\\b\\s|\\bNY\\b\\s|\\bNC\\b\\s|\\bND\\b\\s|\\bOH\\b\\s|\\bOK\\b\\s|\\bOR\\b\\s|\\bPA\\b\\s|\\bRI\\b\\s|\\bSC\\b\\s|\\bSD\\b\\s|\\bTN\\b\\s|\\bTX\\b\\s|\\bUT\\b\\s|\\bVT\\b\\s|\\bVA\\b\\s|\\bWA\\b\\s|\\bWV\\b\\s|\\bWI\\b\\s|\\bWY\\b\\"

使用单词边界可防止状态缩写与字符串的其他部分匹配(例如 CArlsbad 中的“CA”)。\\b


如果 TX 是您唯一关心的分隔符,那么可以简化:

str_split_i("Fake City, TX Court House", "TX ", 2)

可比较的基础 R 解决方案:

sapply(strsplit("Fake City, TX Court House", "TX "), `[`, 2)
0赞 Umar 10/4/2023 #3

这是怎么回事

text <- "Fake City, TX Court House"

# Use regular expression to extract "Court House"
result <- sub(".*, TX (.*)", "\\1", text)

# Print the result
print(result)

"Court House"