正则表达式排除以某种模式开头的数字
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”
命令 ?!
。
这将排除 5501
和 5500
希望对您有所帮助
我有以下号码列表:
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”
命令 ?!
。
这将排除 5501
和 5500
希望对您有所帮助