【发布时间】:2021-07-19 23:21:16
【问题描述】:
我想找到以 A 开头并在 A 之后有 6 个数字的单词。如下所示,我希望第一个 A123456 返回 TRUE,第二个 Approval 返回 FALSE。因为我正在寻找的模式是一个以大写 A 开头的单词,后面有 6 个数字。
grepl("\\<A", c("A123456","Approval"))
【问题讨论】:
标签: r
我想找到以 A 开头并在 A 之后有 6 个数字的单词。如下所示,我希望第一个 A123456 返回 TRUE,第二个 Approval 返回 FALSE。因为我正在寻找的模式是一个以大写 A 开头的单词,后面有 6 个数字。
grepl("\\<A", c("A123456","Approval"))
【问题讨论】:
标签: r
不清楚你是否也想要 TRUE 对于在 A 之后有超过 6 个数字的东西,例如“A123456zz”。如果是这样,请删除正则表达式末尾的 $
grepl("^A[0-9]{6}$", c("A123456","Approval"))
# [1] TRUE FALSE
https://regex101.com/r/BiYlhK/1
我不妨复制/粘贴 regex101 给出的这个正则表达式的解释,因为它比我能更好地描述模式
^
在行首断言位置
一个
从字面上匹配索引为 6510(4116 或 1018)的字符 A(区分大小写)
[0-9]
匹配 0(索引 48)和 9(索引 57)之间的单个字符(区分大小写)
{6}
准确匹配前一个标记 6 次
$
在行尾断言位置
【讨论】:
量词适用于此类工作。 '\\d' 查找任何数字(0, 1, 2, 3, 4, 5, 6, 7, 8, 9),而 '{' - 量词 - 允许您指定要匹配的数量范围:{LOWER_BOUND, UPPER_BOUND}。排除逗号意味着您需要确切数量的匹配项。下面提供了 stringr 的实现。
stringr::str_detect(c("A123456", "Approval"), "A\\d{6}")
【讨论】:
尝试grepl,如下所示
> grepl("^A\\d{6}", c("A123456", "Approval"))
[1] TRUE FALSE
【讨论】: