解析数据框中大文本列中的特定文本 - R

时间:2016-08-12 20:08:01

标签: regex r text-parsing strsplit

假设我有以下数据,

data

text
abc/1234&
qwertyabc/5555&
a&sdfghabc/ppp&plksa&
z&xabc/lkjh&poiuw&
lkjqwefasrjabc/855698&plkjdhweb

例如,如果我想解析abc /和第一次出现&之间的文本。单独,我如何解析这些文本之间的文本。我希望在第一次出现abc /和第一次出现&之间的文本。在abc /发生之后。

我的输出应该如下,

数据

text                                 parsed_out
abc/1234&                               1234 
qwertyabc/5555&                         5555
a&sdfghabc/ppp&plksa&                    ppp
z&xabc/lkjh&poiuw&                      lkjh
lkjqwefasrjabc/855698&plkjdhweb       855698

以下是我的尝试,

data1 = within(data, FOO<-data.frame(do.call('rbind', strsplit(as.character(text), 'abc/', fixed=TRUE))))

data2 = within(data1, FOO1<-data.frame(do.call('rbind', strsplit(as.character(FOO$X1), '&', fixed=TRUE))))

这使用了太多的内存,因为文本文件有800万行,而data2也有几列,因为它有几个'&amp;'。任何人都可以帮助我以最有效的方式将这两个字符之间的文本解析为只有一列,这样它就不会占用太多的内存吗?

x = "thesearepresentinthestartingwhichisnotneededhttp://google.com/needstobeparsedout&reoccurencenotneeded&"

这里,该函数应该检查http://google.com/并解析直到第一个&amp;找到了。这里的输出应该是必须的。

new_x =“\”http://www.google.com/search?q=erykah+badu+with+hiatus+kaiyote,+august+3&“”

为什么不使用此链接?

由于

1 个答案:

答案 0 :(得分:0)

  

我实际上想要解析网址的几个部分,例如,我想解析一下,&#34; http:www.google.com /&#34;并且第一次出现&#34;&amp;&#34;。

使用

sub(".*?https?://(?:www\\.)?google\\.com/([^&]+).*", "\\1", x)

请参阅regex demo

模式匹配:

  • (可选择在前面添加^以匹配字符串位置的开头)
  • .*? - 从开头到第一个
  • 尽可能少的0个字符
  • https?:// - https://http://后跟
  • (?:www\\.)? - 1或0(可选)序列www.
  • google\\.com/ - 文字google.com
  • ([^&]+) - 除&以外的1个或多个字符(捕获组1)
  • .* - 任何0+字符(直到字符串结尾)。

在替换模式中,\1指的是捕获到组1中的子文本。