Regex R中的正则表达式:如何从字符向量中的字母数字元素中提取某些字母?
例如,我有以下字母数字元素的字符向量,其中包含元素中某个位置的状态缩写:Regex R中的正则表达式:如何从字符向量中的字母数字元素中提取某些字母?,regex,r,Regex,R,例如,我有以下字母数字元素的字符向量,其中包含元素中某个位置的状态缩写: strings <- c("0001AZ226", "0001CA243", "0NA01CT134", "0001CT1NA", "0001ID112", "NAVA230") 我以前使用过正则表达式来删除每个元素的所有非整数,但从未删除过所有数字和字母N和A 这是我尝试过的,但没有成功: sub(paste(LETTERS[c(2:13,15:26)], collapse = "|"), "", string
strings <- c("0001AZ226", "0001CA243", "0NA01CT134", "0001CT1NA", "0001ID112", "NAVA230")
我以前使用过正则表达式来删除每个元素的所有非整数,但从未删除过所有数字和字母N和A
这是我尝试过的,但没有成功:
sub(paste(LETTERS[c(2:13,15:26)], collapse = "|"), "", strings, fixed = TRUE)
可以使用looarounds完成
# (?i)(?:(?!na|(?<=n)(?=a))[a-z])+
(?i) # Case insensitive modifier (or use as regex flag)
(?: # Cluster group
(?! # Negative assertion
na # Not NA ahead
| (?<= n ) # Not N behind,
(?= a ) # and A ahead (at this location)
) # End Negative assertion
[a-z] # Safe, grab this single character
)+ # End Cluster group, do 1 to many times
#(?i)(?:(?!na |)(?可以使用looarounds完成
# (?i)(?:(?!na|(?<=n)(?=a))[a-z])+
(?i) # Case insensitive modifier (or use as regex flag)
(?: # Cluster group
(?! # Negative assertion
na # Not NA ahead
| (?<= n ) # Not N behind,
(?= a ) # and A ahead (at this location)
) # End Negative assertion
[a-z] # Safe, grab this single character
)+ # End Cluster group, do 1 to many times
默认情况下,状态
数据集可用。查看:
?state
sts <- paste(state.abb,collapse="|")
sub(paste0( "(.+)(", sts, ")(.+)"), "\\2", strings)
[1] "AZ" "CA" "CT" "CT" "ID" "VA"
默认情况下,状态
数据集可用。查看:
?state
sts <- paste(state.abb,collapse="|")
sub(paste0( "(.+)(", sts, ")(.+)"), "\\2", strings)
[1] "AZ" "CA" "CT" "CT" "ID" "VA"
前提是状态仅后跟三个字符
strings.stripped <- gsub("([A-Z]{2}).{3}$", "\\1", strings)
strings.stripped条件是状态仅后跟三个字符
strings.stripped <- gsub("([A-Z]{2}).{3}$", "\\1", strings)
strings.stripped一个简单的解决方案:
gsub("\\d+|NA", "", strings)
# [1] "AZ" "CA" "CT" "CT" "ID" "VA"
一个简单的解决方案:
gsub("\\d+|NA", "", strings)
# [1] "AZ" "CA" "CT" "CT" "ID" "VA"
gsub('\\d | NA','',strings)
\d
是数字的缩写,请参阅?regex
了解其他方法。如果R支持,则可以使用lookarounds完成。gsub('\\d | NA','',strings)
\d
是数字的缩写,请参见?如果R支持,则可以使用lookarounds执行其他regex
。@BondedDust这是一个非常优雅的解决方案!也不知道状态
数据集。谢谢。@BondedDust您错过了我编辑的要点。DC未处于状态。abb
。也许我的一些编辑得到了cut off?我明确地说“如果你想将这个解决方案扩展到DC、美国领土等”。如果你想将向量扩展到地区、保护国、非国家公益、军事单位和“领土”的邮政名称缩写(对美国来说,这似乎有点过时),如果只是简单地使用:c(state.abb,“DC”、“PR”、“VI”、“GU”、“MP”、“AA”、“AE”、“AP”、“FM”、“MH”、“PW”)
@bondedust这是一个非常优雅的解决方案!我也不知道状态
数据集。谢谢。@bondedust你错过了我编辑的要点。DC不在状态。abb
。也许我的一些编辑被切断了?我明确地说“如果你想将此解决方案扩展到DC、美国领土等”。如果你想将向量扩展到地区、保护国、非国家公益、军事单位和“领土”的邮政名称缩写(对美国来说,这在我耳中似乎有点过时),仅仅使用:c(state.abb,“DC”,“PR”,“VI”,“GU”,“MP”,“AA”,“AE”,“AP”,“FM”,“MH”,“PW”)