Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex R中的正则表达式:如何从字符向量中的字母数字元素中提取某些字母?_Regex_R - Fatal编程技术网

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”)