查找以 alpha 开头的字符串,但多个特定字符除外

Find strings start with alpha except multi specific characters

目标是找到除 "H" 或 "G"**

以外以 alpha 开头的第一个和第二个元素
DD <- c("DD2123","QD2123","HC12231","HCEF","GC2123","1232","--",NA)

grepl("^[[:alpha:]][^H|G]",DD)

找到所有以 alpha 开头的,包括 "H" 和 "G"。

我怎样才能做到这一点?

grepl("^D|Q",DD) 不是我需要的,实际数据有其他 alpha 模式。

您可以使用 PCRE 正则表达式,例如 ^(?![HG])\p{L}^(?![HG])[[:alpha:]]:

> DD <- c("DD2123","QD2123","HC12231","HCEF","GC2123","1232","--",NA)
> grepl("^(?![HG])\p{L}",DD, perl=TRUE)
[1]  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE

^[^\P{L}HG]:

> grepl("^[^\P{L}HG]",DD, perl=TRUE)
[1]  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE

^(?![HG])[[:alpha:]] 模式匹配

  • ^ - 字符串开头
  • (?![HG]) - 不允许 HG 紧靠当前位置
  • 的右侧
  • [[:alpha:]]\p{L} - 一封信。

^[^\P{L}HG] 匹配字符串的开头 (^),然后匹配除非字母以外的任何字符,HG

作为备选方案。 Wiktors的解决方案更通用和实用。

grepl("^[a-zA-FI-Z][0-9a-zA-Z]+$",DD)

您可以先定义 class 个允许出现的值,然后再定义以下位置。


如果允许其他所有内容,只需使用:

grepl("^[a-zA-FI-Z]",DD)