在R中反转正则表达式
我有这个字符串:在R中反转正则表达式,r,regex,stringr,R,Regex,Stringr,我有这个字符串: [1] "19980213" "19980214" "19980215" "19980216" "19980217" "iffi" "geometry" [8] "date_consid" 我想匹配所有非日期和非“日期”的元素。我试过了 但我就是不能让它工作…你可以用
[1] "19980213" "19980214" "19980215" "19980216" "19980217" "iffi" "geometry"
[8] "date_consid"
我想匹配所有非日期和非“日期”的元素。我试过了
但我就是不能让它工作…你可以用
vec[1]“iffi”几何体
见
^(\d{8}| date_consid)$
正则表达式匹配一个仅由八位数字组成或等于date_consid
的字符串
value=TRUE
使grep
返回值而不是索引,并且invert=TRUE
反转正则表达式匹配结果(返回不匹配的结果)。您尝试的模式提供了所有匹配,因为lookaheads是未排序的
使用带有或|
的单独语句仍将匹配所有字符串
您可以将逻辑更改为从字符串开始断言,直接在右边的不是8位数字,也不是单个检查中考虑的日期
使用正向前瞻,您必须添加perl=T
,并添加锚点^
以断言字符串的开头,并添加锚点$
以断言前瞻后字符串的结尾
^(?!\\d{8}$|date_consid$)
字符串的开头^
负前瞻(?!
匹配8位数字直到字符串结束\\d{8}$
或|
匹配日期\u consid直到字符串结束date\u consid$
关闭前瞻)
vec <- c("19980213", "19980214", "19980215", "19980216","19980217", "iffi","geometry", "date_consid")
grep("^(?!\\d{8}$|date_consid$)", vec, value=T, perl=T)
您不需要或
|
,您希望这两个条件都为真。
vec <- c("19980213", "19980214", "19980215", "19980216","19980217", "iffi","geometry", "date_consid")
grep("^(?!\\d{8}$|date_consid$)", vec, value=T, perl=T)
[1] "iffi" "geometry"