我在这里搜索了很多正则表达式的答案,但找不到解决这种问题的方法。
我的数据集是一个带有维基百科链接的tibble:
library(tidytext)
library(stringr)
text.raw <- "Berthold Speer was een [[Duitsland (hoofdbetekenis)|Duits]] [[architect]]."
我正在尝试清理我的文本中的链接。
str_extract_all(text.raw, "[a-zA-Z\\s]+(?=\\])")
# [1] "Duits" "architect"
选择我需要的单词,它们位于括号之间。
这是:
str_replace_all(text.raw, "\\[\\[.*?\\]\\]", str_extract(text.raw, "[a-zA-Z\\s]+(?=\\])"))
# [1] "Berthold Speer was een Duits Duits."
功能正常,但不完全符合我的需求。这个:
str_replace_all(text.raw, "\\[\\[.*?\\]\\]", str_extract_all(text.raw, "[a-zA-Z\\s]+(?=\\])"))
# Error: `replacement` must be a character vector
在我期望的位置,出现了一个错误:"Berthold Speer was een Duits architect"
目前我的代码大致如下:
text.clean <- data_frame(text = text.raw) %>%
mutate(text = str_replace_all(text, "\\[\\[.*?\\]\\]", str_extract_all(text, "[a-zA-Z\\s]+(?=\\])")))
我希望有人能提供解决方案,或者指出是否存在类似问题。我想要的输出结果是"Berthold Speer was een Duits architect"
。
architect
. I want the dots in[[ ... ]]
or[[ xxx | ... ]]
- raoultext.raw %>% gsub(pattern = '\\[.+\\|', replacement = '') %>% gsub(pattern = '\\]|\\[', replacement = '')
- Sean Lingsub("\\[{2}(?:[^]|]*\\|)?([^]|]*)]{2}", "\\1", text)
,参见http://ideone.com/ffnxA2。 - Wiktor Stribiżew