r - 如何找到只知道 r 中第一个的两个单词模式

标签 r regex

我有一个数据集,其中包含从网络上抓取的新闻文章。

对于每篇文章,我都想编写一个代码来区分来源,这样我就可以将它添加到单独列中的数据框中。

问题是我无法编写有效的命令行,我曾尝试使用 grep,但我认为我没有编写正确的正则表达式。

示例:

title   content

Art 1   This is article one. Source: The Guardian.  
Art 2   This is    article two. Source: New York Times.   
Art 3   This is article three.    Source: The Washington Post.

预期结果:

title  source  
Art 1  The Guardian  
Art 2  New York Times   
Art 3  Washington Post

这是我尝试过的(模式总是由单词 Source 后跟 : 后跟一到三个单词组成,并以句号结尾):

source <- grep("(Source:)([:alpha:]{*})(.\)", df, perl = TRUE)

这是我收到的错误信息:

Error in grep("(Source:)([:alpha:]{*})(.))", df, perl = TRUE) : 
  invalid regular expression '(Source:)([:alpha:]{*})(.))'
In addition: Warning message:
In grep("(Source:)([:alpha:]{*})(.))", df, perl = TRUE) :
  PCRE pattern compilation error
    'POSIX named classes are supported only within a class'
    at '[:alpha:]{*})(.))'

我对正则表达式的经验有限,而且我无法在任何地方找到如何实现我的想法。

最佳答案

使用 str_extract 和正后视(“如果你在左边看到......”):

content <- "This is article one. Source: The Guardian."

library(stringr)
source <- str_extract(content, "(?<=Source: )[^.]*")
[1] "The Guardian"

或者,使用 sub 和反向引用:

source <- sub(".*Source: (.*)\\.$", "\\1", content)
[1] "The Guardian"

关于r - 如何找到只知道 r 中第一个的两个单词模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62264268/

相关文章:

r - 哪些数字存在于向量中但不存在于另一个向量中

从数据列中删除点

Ruby 正则表达式搜索

javascript - 密码的正则表达式帮助

r - 如何使用 Nextflow 从 R 可执行文件调用不同 R 脚本中存在的函数

r - 在 Rmarkdown 的 PDF 输出中使用 Fira 代码启用连字

php - 正则表达式匹配精确的单词

regex - 您可以使正则表达式的一部分不区分大小写吗?

javascript - 如何使用正则表达式将 Javascript 多行注释替换为中间文本

r - 在 xml2 中使用正则表达式?