代码之家  ›  专栏  ›  技术社区  ›  rane

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

  •  2
  • rane  · 技术社区  · 6 年前

    DD <- c("DD2123","QD2123","HC12231","HCEF","GC2123","1232","--",NA)
    
    grepl("^[[:alpha:]][^H|G]",DD)
    

    我怎样才能做到这一点?

    grepl("^D|Q",DD)

    2 回复  |  直到 6 年前
        1
  •  4
  •   Wiktor Stribiżew    6 年前

    您可以使用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]) H G 允许直接位于当前位置的右侧
    • [[:alpha:]] \p{L}

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

        2
  •  3
  •   Andre Elrico    6 年前

    作为一种选择。Wiktors解决方案更具通用性和实用性。

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

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


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

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