R中只检测前六个数字的正则表达式函数?
我需要找到必须在R中实现的正则表达式,以检测此测试用例中的前六个数字并输出TRUE/FALSER中只检测前六个数字的正则表达式函数?,r,regex,R,Regex,我需要找到必须在R中实现的正则表达式,以检测此测试用例中的前六个数字并输出TRUE/FALSE test_case = c('401 501', '401-501', '(401)501', '401501', '+401501', '4011501') 我尝试过这个函数: str_detect(test_case, regex('^[- + \\d]{6}')) 但我不能让输出显示为这样: TRUE TRUE TRUE TRUE FALSE FALSE 您可以删除数据中允许的其他字符,然
test_case = c('401 501', '401-501', '(401)501', '401501', '+401501', '4011501')
我尝试过这个函数:
str_detect(test_case, regex('^[- + \\d]{6}'))
但我不能让输出显示为这样:
TRUE TRUE TRUE TRUE FALSE FALSE
您可以删除数据中允许的其他字符,然后检查向量是否正好有6位数字
grepl('^\\d{6}$', gsub('[() -]', '', test_case))
#[1] TRUE TRUE TRUE TRUE FALSE FALSE
在stringr
中实现相同的逻辑:
library(stringr)
str_detect(str_remove_all(test_case, '[() -]'), '^\\d{6}$')
这似乎可以做到:
grepl('^[-\\(\\) ]*[[:digit:]]{3}[-\\(\\) ]*[[:digit:]]{3}$', test_case)
#[1] TRUE TRUE TRUE TRUE FALSE FALSE
比赛的规则不是很清楚。在第五个示例(+401501)中,是否应返回false,因为它的前缀为+?第六个例子是因为它有7个数字,而不是6个?