Regex 用于拆分城市、州的正则表达式

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缩写并存储到名为
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})(?=")