我有一个如下所示的字符向量:
char <- c("AIASDFDIOHS*SDFDS", "ADUIHFSDUHF", "SDIFSDFIHSDOIU", "SDIOHFOSIDH#SDGFOIDS", "SDFIOJSD*IJF")
我想只选择
中的值 1. Start with "A"
2. Do not contain a *
3. Do not contain a #
如何使用正则表达式完成此操作?
谢谢, 千斤顶
答案 0 :(得分:4)
这是一个stringr
解决方案。与只允许数字和字母的Onyambu解决方案相比,这个解决方案匹配*
或#
以外的任何字符,并允许所有其他特殊字符。正则表达式的细分是匹配
^
,字符串的开头[^*#]*
,零个或多个字符不是*
或#
$
,字符串的结尾。请注意,这意味着它会匹配A
,AI%24;:x
和A12 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}}。