用该字符串的一部分替换 tibble 中的字符串
replace string from tibble with part of that string
我在这里搜索了很多正则表达式的答案,但找不到解决此类问题的方法。
我的数据集是带有维基百科链接的小标题:
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"
.
您可以使用单个 gsub 操作
text <- "Berthold Speer was een [[Duitsland (hoofdbetekenis)|Duits]] [[architect]]."
gsub("\[{2}(?:[^]|]*\|)?([^]]*)]{2}", "\1", text)
模式将匹配
\[{2}
- 两个 [
符号
(?:[^]|]*\|)?
- 一个可选的序列匹配
[^]|]*
- ]
和 |
以外的零个或多个字符
\|
- 管道符号
([^]]*)
- 第 1 组:除 ]
之外的零个或多个字符
]{2}
- 两个 ]
符号。
我在这里搜索了很多正则表达式的答案,但找不到解决此类问题的方法。
我的数据集是带有维基百科链接的小标题:
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"
.
您可以使用单个 gsub 操作
text <- "Berthold Speer was een [[Duitsland (hoofdbetekenis)|Duits]] [[architect]]."
gsub("\[{2}(?:[^]|]*\|)?([^]]*)]{2}", "\1", text)
模式将匹配
\[{2}
- 两个[
符号(?:[^]|]*\|)?
- 一个可选的序列匹配[^]|]*
-]
和|
以外的零个或多个字符
\|
- 管道符号
([^]]*)
- 第 1 组:除]
之外的零个或多个字符
]{2}
- 两个]
符号。