首页 > 解决方案 > 删除 2 个字母后跟 2 个数字的字母数字

问题描述

a <- c("it is ZZ10ASDJN123 and ZZ100DD22")

如何删除以前 2 个字母开头的单词,后跟 2 个数字数字,并且不删除任何字母数字超过 2 + 数字数字。

预期输出:

"it is and ZZ100DD22"

此代码仅删除数字。请帮助我获得预期的输出。

gsub('[[:digit:]]+', '', a)

标签: rregexgsubalphanumeric

解决方案


您可以使用

gsub("\\s*\\b[A-Za-z]{2}\\d{2}(?!\\d)\\w*\\b", "", a, perl=TRUE)

请参阅正则表达式演示。替代:

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。

R 演示

a <- c("it is ZZ10ASDJN123 and ZZ100DD22")
gsub("\\s*\\b[A-Za-z]{2}\\d{2}(?!\\d)\\w*", "", a, perl=TRUE)
## => [1] "it is and ZZ100DD22"

推荐阅读