我想在逻辑上找到文件中的ID。这些只有数字,字母和短划线。它们必须包含数字才能被考虑。我可以用2 grepl
个语句做一个布尔值但是想用一个正则表达式做这个。我认为(跳过)(失败)可以工作,但不知道如何。在下文中,我希望将元素1,2,5,6视为ID。
g <- c(
"868776767-ddd-dFFF-999999",
"8888888",
"bbbbbbfdfdgtfref-dsfcsdbcgwecbgfecshdcs-cdhscgbfsd",
"bigbird",
"2",
"3-4",
"swe%h"
)
## This works (I want this result with one regex)
grepl("[A-Za-z0-9-]+", g) & grepl("[0-9]+", g)
## I suspect using this could work with a single regex call.
grepl("(*SKIP)(*FAIL)", g)
答案 0 :(得分:2)
无需搜索复杂的东西:
grepl("^[a-fA-F-]*[0-9][[:xdigit:]-]*$", g)
或
grepl("^[a-fA-F-]*+[[:xdigit:]-]+$", g, perl=T)
其中[:xdigit:]
是包含[a-fA-F0-9]
的POSIX字符类。
第二个版本使用占有量词来确保下一个字符是数字。
如果您想确保没有前导,尾随或连续的连字符:
grepl("^(?:[a-fA-F]+(?:-[a-fA-F]+)*)?[0-9][[:xdigit:]]*(?:-[[:xdigit:]]+)*$", g)
答案 1 :(得分:0)
您可以使用以下内容:
^(?=.*\d)[a-zA-Z0-9-]*$
<强>解释强>
^
:字符串的开头(?=.*\d)
:展望至少一位数[a-zA-Z0-9-]+
:匹配多个字母或数字或-
$
:字符串<强>输出:强>
grepl("^(?=.*\\d)[a-zA-Z0-9-]*$", g, perl=TRUE)
## [1] TRUE TRUE FALSE FALSE TRUE TRUE FALSE