问题描述
a <- c("it is ZZ10ASDJN123 and ZZ100DD22")
我如何删除以前2个字母开头然后以2位数字开头的单词 并且不要删除超过2个数字的字母数字。
预期输出:
"it is and ZZ100DD22"
gsub('[[:digit:]]+','',a)
解决方法
您可以使用
gsub("\\s*\\b[A-Za-z]{2}\\d{2}(?!\\d)\\w*\\b","",a,perl=TRUE)
请参见regex demo。另一种选择:
gsub("\\s*\\b[A-Za-z]{2}\\d{2}[A-Za-z_]\\w*\\b",a)
详细信息
-
\s*
-0个或更多空白字符 -
\b
-单词边界 -
[A-Za-z]{2}
-两个ASCII字母(使用\p{L}
来匹配任何Unicode字母) -
\d{2}
-两位数字 -
(?!\d)
-右边立即没有数字 -
\w*
-0个或更多字母,数字或下划线 -
\b
-单词边界。
在正则表达式的开头添加(*UCP)
,使其完全具有Uniocde意识。
a <- c("it is ZZ10ASDJN123 and ZZ100DD22")
gsub("\\s*\\b[A-Za-z]{2}\\d{2}(?!\\d)\\w*",perl=TRUE)
## => [1] "it is and ZZ100DD22"