正则表达式排除以某种模式开头的数字

RegEx to exclude number that begin with some pattern

我有以下号码列表:

5501, 534, 234, 550, 5500

我想 select 除“5501”和“5500”之外的所有号码,并将其与 R 中的 stringr 包一起使用。 我没有运气地尝试了以下表达式:

^((?!550)\d)*$ 

我们可以使用grep

v1[grep("^.{3}$", v1)]
#[1] 534 234 550

或更具体地说

v1[grep("^550[01]$", v1, invert=TRUE)]
#[1] 534 234 550

数据

v1 <-  c(5501, 534, 234, 550, 5500)

如果您只想消除那两个确切的字符串(例如永远不会消除 5502),您可以使用标准 R 子集化,无需使用正则表达式。

x <- c(5501, 534, 234, 550, 5500)
x <- x[x != 5500 & x != 5501]

相反,如果您关心所有以 550 开头的值而不是那些可能在其他地方有 550 的值,您可以使用

x<-x[stringi::stri_sub(x, 1,3) != "550"  | x == "550"]

试试这个正则表达式:

^((?!5501|5500)[0-9]*)$

观察上面正则表达式中的 “Negative Lookahead” 命令 ?!。 这将排除 55015500

希望对您有所帮助