`r`:在没有模式先验知识的情况下有效地识别两个字符串的相同部分?
我正在寻找以下问题的有效解决方案:`r`:在没有模式先验知识的情况下有效地识别两个字符串的相同部分?,r,regex,string,R,Regex,String,我正在寻找以下问题的有效解决方案: a <- "TestStringA" b <- "TeststringB" magical_string_processing(a, b) > [1] "Test" "tring" 匹配的字符串因此被很好地识别,但实际的子字符串没有被提取 谢谢你的指点。也许是这个 神奇的字符串处理任务是提取位置受限的相同字符串: a <- "TestStringA" b <- "TeststringB" 结果: a <- "TestSt
a <- "TestStringA"
b <- "TeststringB"
magical_string_processing(a, b)
> [1] "Test" "tring"
匹配的字符串因此被很好地识别,但实际的子字符串没有被提取
谢谢你的指点。也许是这个
神奇的字符串处理任务是提取位置受限的相同字符串:
a <- "TestStringA"
b <- "TeststringB"
结果:
a <- "TestStringA"
b <- "TeststringB"
magical_string_processing(a,b)
[1] "Test" "tring"
其他例子:
a <- "Match1NOMATCH match2test"
b <- "Match1nomatch match2"
magical_string_processing(a,b)
[1] "Match1" " match2"
a <- "TestStringA1testes eeeee"
b <- "TeststringB2ees eeeee"
magical_string_processing(a,b)
[1] "Test" "tring" "es" "eee"
删除位置性约束使此操作更加复杂,但可行: 神奇的字符串处理您可以使用adist并拉取转换序列。然后找到字符串中的位置,即,并提取子字符串 图书馆长
很容易得到Testtring的相同部分,但是要把Test作为一个词,把StringA作为另一个词,如果没有某种字典,可能是不可能的。你能再举几个输入和预期输出的例子吗?你是如何定义相同的部分的?@RonakShah-原来的部分确实模棱两可,我试图通过编辑来解决这个问题。标识将是一个一对一的字符匹配,可以通过一个附加的ignore_case标志来控制它,但这是装饰性的。很好的循环,但这不会推广到长度不等的字符串,请尝试使用@Radim,你是对的-我的意思是使用min而不是max作为stop at。现在更新。回答得好。然而,当我使用这个函数并输入您在上面给我的评论中给出的两个字符串时,这确实是一个不错的选择。@AllanCameron观察到的非位置约束匹配使得它在我的情况下不可用。@AllanCameron是的,你是对的,我一对你的解决方案发表评论就意识到了这一点。我让我的更强壮。。。但也更复杂。现在已经有足够的指针了:这将为magical_string_processinga、b和magical_string_processingb返回不同的结果,a如果定义为Yes@Radim,这实际上取决于函数的要求。我认为这个解决方案可以很容易地给出所需的输出。@例如,Radim,你可以有一个包装函数,它可以双向调用这个函数,并且只返回唯一的结果。很好!这与我想要的是一致的——我将报告最终结果。请注意,stringr::str_squish意味着对终端空白进行修剪,因此stringr::str_修剪显得多余。我认为这归结为在解释特拉福斯的结果时需要更为复杂一点。
a <- "TestStringA"
b <- "TeststringB"
magical_string_processing(a,b)
[1] "Test" "tring"
magical_string_processing(b,a)
[1] "Test" "tring"
a <- "Match1NOMATCH match2test"
b <- "Match1nomatch match2"
magical_string_processing(a,b)
[1] "Match1" " match2"
a <- "TestStringA1testes eeeee"
b <- "TeststringB2ees eeeee"
magical_string_processing(a,b)
[1] "Test" "tring" "es" "eee"