在adist中处理多个匹配

时间:2014-06-17 15:54:16

标签: regex r string-matching

我想在字符串中匹配字符之前计算字符插入的数量。我从"trafos"函数输出中提取adist()属性以返回转换字符串。当只有一个我感兴趣的角色的实例时,这很好用。例如,

attr(adist("r","world",counts=T),"trafos")

返回

     [,1]   
[1,] "IIMII"

因此,在" M"之前计算" I" s会给我我的答案:2

但是,当存在多个实例时,由于某种原因,该函数仅返回最终实例的匹配项。例如,

attr(adist("r","barry",counts=T),"trafos")

返回

     [,1]   
[1,] "IIIMI"

我有什么方法可以让adist()返回" IIMMI"或至少" IIMII"?也许我需要打开另一个功能或选项?我应该考虑酿造自己的功能吗?

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

这不是一个特别优雅的解决方案,但它可能已经足够好了。

parts <- strsplit("barry", "r")[[1]]

nchar(parts[1])

编辑: 我把它放在一个函数中。

nchar.before = function(before, string)
{
  parts = strsplit(string, before)

  return(as.numeric(lapply(parts, function(v) nchar(v[1]))))  
}

示例:

strings = c("rabc", "abcr", "abcrabcr", "abcabc")
nchar.before(before = "r", string = strings)

输出:0 3 3 6 注意如果&#34; r&#34;它是如何输出字符串的整个长度的。不在其中。您可以轻松修改此项,而不是生成NA或其他内容。