【问题标题】:How can I keep only alphanumeric and numeric characters (codes), while deleting the rest of the string?如何只保留字母数字和数字字符(代码),同时删除字符串的其余部分?
【发布时间】:2020-03-18 14:46:29
【问题描述】:

我有一列全是文本,我必须在其中只提取一个固定代码,该代码只能由数字或数字和字母组成(如 23356978 和 Z23489CDE 或 D123F598 以及任何其他组合)。 如何在删除字符串的其余部分时只保留这些代码?

我正在尝试类似的东西

gsub("[A-F][A-Z]*[A-Z]","",string)

但是像这样我也丢失了代码中的字母

有什么建议吗?

【问题讨论】:

  • 我们可以看看你的字符串的一些例子吗?
  • 我们可以看看您预期输出的一些示例吗?
  • "CIG --- ZD5083D833",
  • Proposte di informazione e comunicazione - 艺术。 78 德尔注册。 UE 508/2014 - PO FEAMP Sicilia 2014/2020 - DDG n。 2018 年 1 月 21 日 - DDG n。 538 del 26/09/2018 - 蓝海大陆 2018 - CIG ZD4251ACC6"

标签: r substring character gsub


【解决方案1】:

您可以将所有不是字母数字的内容替换为空字符串,如下所示:

a<-"aa-46,83!jhdf"
gsub("[^[:alnum:]]","",a)
[1] "aa4683jhdf"

或者,同样的事情:

gsub("\\W","",a)

\W\w 是相反的,后者是“单词”或任何字母数字字符的符号,尽管这也会保留下划线,这是您可能不想要的 \w 的一部分)

【讨论】:

  • \W 不等于 [^[:alnum:]]。至少它不匹配_[^[:alnum:]] does
  • 是的,我在底部的括号中写了这么多。这就是为什么它不是主要选项。
【解决方案2】:

这样的?

strings <- c("A5$^", "%Bhg*", "%HG458#")
gsub("[^[:alnum:]]", "", strings)
# [1] "A5"    "Bhg"   "HG458"

[:alnum:] 类匹配所有字母数字字符(大小写字母和数字)。 [ ] 内的否定运算符^ 表示匹配所有除了其后的模式,因此[^[:alnum:]] 匹配任何-字母数字字符。然后,上面的完整 gsub 表达式将任何非字母数字字符替换为空白字符串 ""。有关详细信息,请参阅?regex

【讨论】:

  • 它不起作用,它只会删除单词中的“空格”
  • Proposte di informazione e comunicazione - 艺术。 78 德尔注册。 UE 508/2014 - PO FEAMP Sicilia 2014/2020 - DDG n。 2018 年 1 月 21 日 - DDG n。 538 del 26/09/2018 - Blue Sea Land 2018 - CIG ZD4251ACC6" 当我有这样的东西时,我只需要保留“CIG”之后的字母数字代码
【解决方案3】:

一种选择是使用stringr 替换所有非字母数字字符:

x<-"aa-46,83!jhdf"
stringr::str_replace_all(x, "[^[:alnum:]]", "")

或直接提取并粘贴到字符串中:

paste0(stringr::str_extract_all(x, "[:alnum:]")[[1]], collapse = "")

输出

"aa4683jhdf"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-16
    • 1970-01-01
    • 2019-05-26
    相关资源
    最近更新 更多