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

Parsing out particular text in a big text column in a Dataframe - R

假设我有以下数据,

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 会有多个列,因为它有多个“&”。谁能帮助我以最有效的方式将这两个字符之间的文本解析为仅一列,以免占用太多内存?

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

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

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

为什么它不能使用这个 link?

谢谢

I actually wanted to parse out few parts of the URL and for example, I want to parse out, the text between "http:www.google.com/" and first occurrence of "&".

使用

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中的潜台词。