【发布时间】:2016-02-24 16:19:23
【问题描述】:
我想这是一个常见的问题,我发现了很多网页,包括一些来自 SO,但我不明白如何实现它。
我是 REGEX 的新手,我想在 R 中使用它来从句子中提取前几个单词。
例如,如果我的句子是
z = "I love stack overflow it is such a cool site"
id 喜欢让我的输出保持原样(如果我需要前四个单词)
[1] "I love stack overflow"
或者(如果我需要最后四个字)
[1] "such a cool site"
当然,下面的作品
paste(strsplit(z," ")[[1]][1:4],collapse=" ")
paste(strsplit(z," ")[[1]][7:10],collapse=" ")
但我想尝试使用正则表达式解决性能问题,因为我需要处理非常大的文件(也是为了了解它)
我查看了几个链接,包括 Regex to extract first 3 words from a string 和 http://osherove.com/blog/2005/1/7/using-regex-to-return-the-first-n-words-in-a-string.html
所以我尝试了类似的东西
gsub("^((?:\S+\s+){2}\S+).*",z,perl=TRUE)
Error: '\S' is an unrecognized escape in character string starting ""^((?:\S"
我尝试了其他东西,但它通常会返回整个字符串或空字符串。
substr 的另一个问题是它返回一个列表。可能看起来[[]] 运算符在处理大文件和应用程序时有点慢(??)。
看起来 R 中使用的语法有些不同? 谢谢!
【问题讨论】:
-
您需要在 R 正则表达式中使用双重转义。
\S->\\S -
您也可以尝试
stringi::stri_extract_all_words(z)[[1]][1:4],它更易于使用且不需要了解正则表达式。虽然你会得到一个单独的值。 -
你不能使用我分享的相同想法in your earlier question吗?正如@stribizhev 已经指出的那样,您只需将 R 中的反斜杠加倍。
-
是的@Ananda Mahto 抱歉,我学得很慢,现在我知道我需要双反斜杠