正则表达式选择以A开头的字符串,不包含星号或井号

时间:2018-05-02 21:54:26

标签: r regex

我有一个如下所示的字符向量:

char <- c("AIASDFDIOHS*SDFDS", "ADUIHFSDUHF", "SDIFSDFIHSDOIU", "SDIOHFOSIDH#SDGFOIDS", "SDFIOJSD*IJF")

我想只选择

中的值
   1. Start with "A"
   2. Do not contain a *
   3. Do not contain a #

如何使用正则表达式完成此操作?

谢谢, 千斤顶

3 个答案:

答案 0 :(得分:4)

这是一个stringr解决方案。与只允许数字和字母的Onyambu解决方案相比,这个解决方案匹配*#以外的任何字符,并允许所有其他特殊字符。正则表达式的细分是匹配

  • ^,字符串的开头
  • [^*#]*,零个或多个字符不是*#
  • $,字符串的结尾。

请注意,这意味着它会匹配AAI%24;:xA12 345等字符串。可以调整以解决更多案例。

library(stringr)
char <- c("AIASDFDIOHS*SDFDS", "ADUIHFSDUHF", "SDIFSDFIHSDOIU", "SDIOHFOSIDH#SDGFOIDS", "SDFIOJSD*IJF")
str_subset(char, "^A[^*#]*$")
#> [1] "ADUIHFSDUHF"

reprex package(v0.2.0)创建于2018-05-02。

答案 1 :(得分:1)

grep("^A\\w+$",char,value = T)
[1] "ADUIHFSDUHF"

答案 2 :(得分:1)

使用negative look-ahead上的*以及#start A grep可以选择使用char <- c("AIASDFDIOHS*SDFDS", "ADUIHFSDUHF", "SDIFSDFIHSDOIU", "SDIOHFOSIDH#SDGFOIDS", "SDFIOJSD*IJF") grep("^A(?!.*[*#])",char, value = TRUE, perl = TRUE) [1] "ADUIHFSDUHF"

^A

正则表达式解释:

  • A - 以(?!.*[*#])
  • 开头
  • * - #&amp;的负面预测*。含义字符串不应包含#或{{1}}。