Regex 用于拆分城市、州的正则表达式
我有一个数据框中的城市、州数据列表。我只需要提取state缩写并存储到名为Regex 用于拆分城市、州的正则表达式,regex,r,Regex,R,我有一个数据框中的城市、州数据列表。我只需要提取state缩写并存储到名为state的新变量列中。从外观上看,状态似乎总是字符串中的最后两个字符,并且它们都是大写的。城市、州数据如下所示: test <- c("Anchorage, AK", "New York City, NY", "Some Place, Another Place, LA") 电子数据交换: 我使用了另一个常规表达式: pattern2 <- "([a-z, ])" sp <- strsplit(tes
state
的新变量列中。从外观上看,状态似乎总是字符串中的最后两个字符,并且它们都是大写的。城市、州数据如下所示:
test <- c("Anchorage, AK", "New York City, NY", "Some Place, Another Place, LA")
电子数据交换:
我使用了另一个常规表达式:
pattern2 <- "([a-z, ])"
sp <- strsplit(test, pattern2)
因此,缩写是存在的,但是当我尝试使用sapply()
提取时,我不确定如何获取列表的最后一个元素。我知道如何获得第一个:
sapply(sp, "[[", 1)
我不确定这里是否真的需要正则表达式。如果总是只需要字符串的最后两个字符,只需使用
substring(test, nchar(test)-1, nchar(test))
[1] "AK" "NY" "LA"
如果你真的坚持正则表达式,至少考虑使用<代码> ReExcRe> <代码>,而不是<代码> StruSts/CODE >。因为你对分割不感兴趣,你只想提取状态。
m <- regexec("[A-Z]+$", test)
unlist(regmatches(test,m))
# [1] "AK" "NY" "LA"
m我不确定这里是否真的需要正则表达式。如果总是只需要字符串的最后两个字符,只需使用
substring(test, nchar(test)-1, nchar(test))
[1] "AK" "NY" "LA"
如果你真的坚持正则表达式,至少考虑使用<代码> ReExcRe> <代码>,而不是<代码> StruSts/CODE >。因为你对分割不感兴趣,你只想提取状态。
m <- regexec("[A-Z]+$", test)
unlist(regmatches(test,m))
# [1] "AK" "NY" "LA"
m这可以工作:
regmatches(test, gregexpr("(?<=[,][\\s+])([A-Z]{2})", test, perl = TRUE))
## [[1]]
## [1] "AK"
##
## [[2]]
## [1] "NY"
##
## [[3]]
## [1] "LA"
regmatches(test,gregexpr((?这可以工作:
regmatches(test, gregexpr("(?<=[,][\\s+])([A-Z]{2})", test, perl = TRUE))
## [[1]]
## [1] "AK"
##
## [[2]]
## [1] "NY"
##
## [[3]]
## [1] "LA"
regmatches(test,gregexpr)((?我想你对“[]”和“()”.()”的意思理解相反,“[]”表示匹配一组字符;“[]”表示匹配一个类中的任何一个字符。你需要的是
“(,[A-Z]{2})”。我想你对“[]”和“()”的含义理解相反。(“[]”表示匹配一组字符;“[]”表示匹配一个类中的任何一个字符。你需要的是
“(,[A-Z]{2})”。试试:
tt = strsplit(test, ', ')
tt
[[1]]
[1] "Anchorage" "AK"
[[2]]
[1] "New York City" "NY"
[[3]]
[1] "Some Place" "Another Place" "LA"
z = list()
for(i in tt) z[length(z)+1] = i[length(i)]
z
[[1]]
[1] "AK"
[[2]]
[1] "NY"
[[3]]
[1] "LA"
尝试:
这里有一个同样的正则表达式
Regex
(?'state'\w{2})(?=")
测试字符串
"Anchorage, AK", "New York City, NY", "Some Place, Another Place, LA"
结果
- 比赛1
- 州[12-14]
AK
- 比赛2
- 州[33-35]
NY
- 比赛3
- 州[66-68]
LA
如果需要,可以删除命名捕获以使其变小
乙二醇
这里有一个同样的正则表达式
Regex
(?'state'\w{2})(?=")
测试字符串
"Anchorage, AK", "New York City, NY", "Some Place, Another Place, LA"
结果
- 比赛1
- 州[12-14]
AK
- 比赛2
- 州[33-35]
NY
- 比赛3
- 州[66-68]
LA
如果需要,可以删除命名捕获以使其变小
乙二醇
如果你想走这条路,像sapply(strsplit(test,“,”),tail,1)
这样的东西会更简单。substr
可能仍然更可取。如果你想走这条路,像sapply(strsplit(test,“,”,tail,1)
这样的东西会更简单。substr
可能仍然更可取。
(\w{2})(?=")