r - 如何提取和删除字符串?所以我可以让相似的表达式匹配 1 次而不是多次
问题描述
问题描述:我目前正在从丛书中提取名称。许多角色会使用昵称、名称的一部分或头衔。我有一个名称列表,我将其用作所有数据的模式。问题是我得到了全名和部分名称的多个匹配项。总共有 3000 个名称和名称的变体,我在大量文本中运行。当前按从最长字符串到最短字符串的顺序提取名称。
问题:
如何确保在提取模式后,将匹配的任何文本从字符串中删除?
我得到什么:
str_extract("Mr Bean and friends", pattern = fixed(c("Mr Bean", "Bean", "Mr")))
[1] "Mr Bean" "Bean" "Mr"
我想要什么:(我知道我不能只使用 str_extract() 或一行代码来实现这一点)
str_extract("Mr Bean and friends", pattern = fixed (c("Mr Bean", "Bean", "Mr")))
[1] "Mr Bean" NA NA
解决方案
一种选择是递归更新。由于我们希望输出'n' 等于vector
of ,因此创建一个输出向量来存储值,然后在执行每个 'pattern' 后通过从字符串中删除 'pattern' 并更新它来更新初始字符串length
length
pattern
vector
library(stringr)
for(i in seq_along(pat)) {
out[i] <- str_extract(str1, pattern = fixed(pat[i]))
str1 <- str_remove(str1, pat[i])
}
out
#[1] "Mr Bean" NA NA
或者使用相同的方法vapply
并更新初始字符串<<-
unname(vapply(pat, function(p) {
out <- str_extract(str1, p)
str1 <<- str_remove(str1, p)
out}, character(1)))
#[1] "Mr Bean" NA NA
数据
# initialize an output vector
out <- character(length(pat))
# pattern vector
pat <- c("Mr Bean", "Bean", "Mr")
# initial string
str1 <- "Mr Bean and friends"
str2 <- str1
推荐阅读
- sql - SQL - 根据条件和优先级返回唯一行
- sql-server - SQL-Server - 使用内连接更新,输出也使用内连接
- python - 在 Pandas 中调用 resample() 时出现 TypeError
- java - 模拟选举的蒙特卡罗模拟
- javascript - AngularJs - 如何在同一个 JSP 中调用父控制器
- hadoop - 如何通过从另一个配置单元表中的 5 个不同列中获取唯一值来在配置单元表中插入一列
- php - CRUD - 在 Laravel 上删除
- f# - 针对 List 变量的模式匹配
- c++ - 参数不能被初始化
- javascript - 在 safari 和 safari mobile 中加载下一个网页时显示微调器