【问题标题】:R str_extract_all expression to extract all letters, numbers, dollar signs, single and double quotesR str_extract_all 表达式提取所有字母、数字、美元符号、单引号和双引号
【发布时间】:2018-09-18 00:04:19
【问题描述】:

我几天前才开始接触 R,到目前为止,正则表达式本身比我尝试过的任何编程语言都更难,呵呵... 我迫切需要一个,它可以帮助我提取所有字母、数字、美元符号、单引号和双引号的序列(最后两个似乎是问题所在)。 它适用于使用朴素贝叶斯的垃圾邮件预测项目,并且需要区分其中可能包含单引号或双引号的符号序列。 我专门使用 stringr 库中的 str_extract_all 函数,并且在过去两天中必须阅读 50 篇文章,但没有找到什么可以解决我的具体问题,以至于我根本没有时间。 任何帮助都将不胜感激,并将使我在机器学习兴趣方面向前迈出一步。 干杯。

【问题讨论】:

  • 请发布一些示例输入和所需的输出。看到你的一两次尝试也很好,这样我们就可以看到你做了什么,不明白什么。
  • 一般来说,对于正则表达式,我强烈建议在regex101.com 进行尝试和调试。当您在那里有一个工作正则表达式时,您可以通过将所有反斜杠 \ 加倍来将其从那里移动到 R。
  • 而且,对于样本案例,只要覆盖一个合适的范围,只需要 3 或 4 个短样本输入。例如使用test = c("hello", "hello world", "hello123 wo$rld", "he'll$o!wo\"rl$25\"d", "#@$$123^'as'd"),向我们展示您对该输入的期望输出。

标签: r regex stringr


【解决方案1】:

您可以尝试在此处使用regmatches 来返回给定输入字符串中您的模式的所有匹配项:

txt <- "Hello World \"how are you today\"?  Goodbye."
m <- gregexpr("[0-9A-Za-z$'\"]+", txt, perl = TRUE)
regmatches(txt, m)

[[1]]
[1] "Hello"   "World"   "\"how"   "are"     "you"     "today\"" "Goodbye"

Demo

输出可能没有多大意义,但您没有将空格作为序列中允许的字符包含在内。因此,我们只剩下单词,可能两边都有引号。

【讨论】:

  • 我刚刚第十次写了这个完全相同的表达式,这次它成功了......猜猜这只是其中一次,你运行同样的东西并且由于某种原因它最终起作用了。猜猜这就是成为编程语言新手的感觉。我花了两天时间才发现 R Studio 只运行当前行或选择,呵呵……干杯。
  • @AudriusUžkuraitis 很高兴为您提供帮助,如果有其他问题,请留言。
猜你喜欢
  • 2018-01-25
  • 1970-01-01
  • 2018-06-19
  • 2023-02-23
  • 1970-01-01
  • 2015-10-29
  • 2021-05-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多