R 如何在字符串中找到(模糊)匹配的位置?

R 如何在字符串中找到(模糊)匹配的位置?,r,string,text,R,String,Text,我在R中有一个文本处理问题。我想得到字符串中的字符,其中不同的字符串进行精确匹配和/或模糊匹配,并具有一定的编辑距离。例如: A = "blahmatchblah" B = "match" C = "latch" 我想返回一些信息,告诉我字符串A中的第5个字符是搜索B和C的匹配位置。我知道的所有模式匹配工具都会告诉我A中的B和C是否存在(模糊)匹配,但对于匹配开始的位置没有任何注释。我没有rep来评论,但至少对于问题的第一部分:gregexpr(B,A)[[1]][1]将产生5,因为“matc

我在R中有一个文本处理问题。我想得到字符串中的字符,其中不同的字符串进行精确匹配和/或模糊匹配,并具有一定的编辑距离。例如:

A = "blahmatchblah"
B = "match"
C = "latch"

我想返回一些信息,告诉我字符串A中的第5个字符是搜索B和C的匹配位置。我知道的所有模式匹配工具都会告诉我A中的B和C是否存在(模糊)匹配,但对于匹配开始的位置没有任何注释。

我没有rep来评论,但至少对于问题的第一部分:gregexpr(B,A)[[1]][1]将产生5,因为“match”是A中的有效子序列。

基本函数
aregexec()
用于近似字符串位置匹配。不幸的是,它没有在
模式
上矢量化,因此我们必须使用循环来获取
B
C
的位置

sapply(c(B, C), aregexec, A)
# $match
# [1] 5
# attr(,"match.length")
# [1] 5
#
# $latch
# [1] 5
# attr(,"match.length")
# [1] 5

有关更多信息,请参见
帮助(aregexec)

几个月前,我在R中为Python包制作了一个接口,该接口具有get\u matching\u blocks()方法(它与您实际要求的非常接近)

假设要在两个字符串之间找到匹配的块

A = "blahmatchblah"
B = "match"

library(fuzzywuzzyR)

init <- SequenceMatcher$new(string1 = A, string2 = B)

init$get_matching_blocks()
第一个子列表给出两个字符串的匹配块a=4给出字符串的起始索引ab=0给出字符串的起始索引b(索引从0开始)size=5给出两个字符串匹配的字符数(在这种情况下,匹配块为“匹配”且有5个字符)

特别是SequenceMatcher,有更多信息

[[1]]
Match(a=4, b=0, size=5)

[[2]]
Match(a=13, b=5, size=0)