查找以字母开头的字符串,但不包含多个特定字符

时间:2018-11-05 08:34:31

标签: r regex grepl

目标是查找以字母开头的第一和第二元素(“ H”或“ G”除外)**

DD <- c("DD2123","QD2123","HC12231","HCEF","GC2123","1232","--",NA)

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

找到所有以“ H”和“ G”开头的字母。

我该如何实现?

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

2 个答案:

答案 0 :(得分:4)

您可以使用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以外的任何字符。

答案 1 :(得分:3)

作为替代。 Wiktors解决方案更加通用和实用。

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

您可以定义一类允许首先出现的值,然后定义以下位置。


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

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