需要帮助改进R中的正则表达式代码吗

需要帮助改进R中的正则表达式代码吗,r,regex,R,Regex,我正在处理地址数据,并使用正则表达式检测错误。虽然我的方法有效,但远远不够高效 首先,让我们创建一个数据集 try_detection <- data.frame(address = c('444+MLK+Street', '444+3rd+Avenue', '5th+MLK+Avenue',

我正在处理地址数据,并使用正则表达式检测错误。虽然我的方法有效,但远远不够高效

首先,让我们创建一个数据集

try_detection <- data.frame(address = c('444+MLK+Street', 
                                    '444+3rd+Avenue',
                                    '5th+MLK+Avenue', 
                                    '55th+MLK+Avenue', 
                                    '555th+MLK+Avenue',
                                    '5555th+MLK+Avenue',
                                    '55555th+MLK+Avenue'),
                        stringsAsFactors = FALSE)
尝试检测您可以使用

^[[:digit:]]+[[:alpha:]]

详细信息

  • ^
    -字符串的开头
  • [[:digit:]+
    /
    [0-9]+
    -1个或多个(量词与一个或多个出现点匹配)数字
  • 一封信
注意:如果您计划只匹配开头有1到5位数字后跟字母的字符串,您可以将
+
替换为
{1,5}
限制(或范围、间隔)量词

尽管ICU正则表达式允许使用裸POSIX字符类(如
[:digit:]
),但我建议在括号表达式中使用它们,使它们更易于移植(即
[:digit:]

try_detection$summary <- str_detect(try_detection$address, 
                               '^[:digit:]{1}[:alpha:] | 
                                ^[:digit:]{2}[:alpha:] | 
                                ^[:digit:]{3}[:alpha:] | 
                                ^[:digit:]{4}[:alpha:] | 
                                ^[:digit:]{5}[:alpha:]')
try_detection$detect1 <- str_detect(try_detection$address, '^[:digit:]{1}[:alpha:]')
try_detection$detect2 <- str_detect(try_detection$address, '^[:digit:]{2}[:alpha:]')
try_detection$detect3 <- str_detect(try_detection$address, '^[:digit:]{3}[:alpha:]']
try_detection$detect4 <- str_detect(try_detection$address, '^[:digit:]{4}[:alpha:]')
try_detection$detect5 <- str_detect(try_detection$address, '^[:digit:]{5}[:alpha:]')

try_detection <- try_detection %>% mutate(summary = 
                                        ifelse(detect1 == TRUE | 
                                               detect2 == TRUE | 
                                               detect3 == TRUE | 
                                               detect4 == TRUE | 
                                               detect5 == TRUE, "Y", "N"))
^[[:digit:]]+[[:alpha:]]
^[0-9]+[[:alpha:]]