正则表达式:在两个单词之间得到文本(在R中)

时间:2017-01-19 23:54:32

标签: r regex

我有一个文本文档,我试图在“抽象”和“关键字”(在R中)之间获取文本。这是我正在使用的代码:

gsub(".*abstract\\s*|keywords.*", "\\1", string)

然而,这不起作用,因为文本中的其他地方出现了“抽象”这个词,所以我把它变得像这样非贪婪(在抽象面前加上?)

gsub(".*?abstract\\s*|keywords.*", "\\1", string)

但由于某种原因,它现在需要“抽象”和“关键字”之间的文本(这是我想要的),但也是从文本中出现的第二个“抽象”开始的文本,一直到最后。 有什么想法吗?

2 个答案:

答案 0 :(得分:1)

看起来你的搜索字词中没有任何内容,你只需要一些()来实际获取内容,\\1将返回你的目标:

words <- c("these are some different abstract words that might be between keywords or they might just be bounded by abstract ideas")
gsub(".* abstract (.*) keywords.*", "\\1", words)
[1] "words that might be between"

答案 1 :(得分:1)

我认为这应该能满足您的需求:

regmatches(string, gregexpr("(?<=abstract).*(?=keywords)", string, perl = TRUE))

它的作用:

  • (?<=abstract)使用&#34;展望未来&#34;能够在单词&#34; abstract&#34;
  • 之后找到的东西
  • .*匹配任意数量的关键字
  • (?=keywords)使用&#34;看后面&#34;用于在单词&#34;关键字&#34;
  • 之前查找内容
  • gregexprstring
  • 中查找给定的正则表达式
  • perl = TRUE允许&#34;展望未来&#34;并且&#34;看后面&#34;功能
  • regmatches使用正则表达式拉出匹配的字符串。