繁体   English   中英

提取两个特定单词之间的字符串,但允许 R 中的不匹配

[英]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指定“所有转换(插入、删除和替换)的最大数量/分数”; 或者使用: insertionsdeletionssubstitutions

模拟数据:

string = c("today IS Oscar", "today drive car", "tody goes Oscar", "tomorrow was Oscar")
  • "today IS Oscar"完全匹配为ignore.case = T确保大小写无关紧要
  • "today drive car"是一个模糊匹配,因为carOscar只有 2 步
  • "tody goes Oscar"是一个模糊匹配,因为todytoday只有一步之遥,而且
  • "tomorrow was Oscar"根本不匹配,因为tomorrow距离today超过 2 步

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM