我有一个数据集,其中包含从网络上抓取的新闻文章。
对于每篇文章,我都想编写一个代码来区分来源,这样我就可以将它添加到单独列中的数据框中。
问题是我无法编写有效的命令行,我曾尝试使用 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/