[英]Extract a string of words between two specific words, but allow for a mismatches in R
我有以下字符串。
string =c("today is Oscar")
我想提取今天和Oscar之间的所有内容,但在今天和Oscar中最多允许两个不匹配/错别字。
在这种情况下,预期的结果将is
,但是在今天和 Oscar 之间有一些字符串有另一个词。 错别字可以出现在今天和Oscar中的任何字母中。
我目前正在查看 agrep package。 任何帮助或指导表示赞赏。
如果我对您的理解正确,您想从向量中提取动词(即中间子字符串),前提是其左侧和右侧的单词最多 2 个插入/删除等远离"today \\w+ Oscar"
图案。
如果该前提是正确的,您可以首先使用agrep
(或agrepl
)在满足该条件的字符串上对向量进行子集化,然后在捕获组(...)
的中间捕获 substring 并使用反向引用\\1
引用它在sub
的替换参数中:
sub("\\w+ (\\w+) \\w+", "\\1", string[agrepl("today \\w+ Oscar", string, max.distance = list(all = 2), ignore.case = T, fixed = F)])
[1] "IS" "drive" "goes"
注意:参数all
指定“所有转换(插入、删除和替换)的最大数量/分数”; 或者使用: insertions
、 deletions
和substitutions
。
模拟数据:
string = c("today IS Oscar", "today drive car", "tody goes Oscar", "tomorrow was Oscar")
"today IS Oscar"
完全匹配为ignore.case = T
确保大小写无关紧要"today drive car"
是一个模糊匹配,因为car
离Oscar
只有 2 步"tody goes Oscar"
是一个模糊匹配,因为tody
离today
只有一步之遥,而且"tomorrow was Oscar"
根本不匹配,因为tomorrow
距离today
超过 2 步
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.