如何在字符串中找到相同的模式?

时间:2018-05-08 05:34:48

标签: r stringr

我想从字符串中提取相同的模式,比如说

<xsl:value-of select="$array[Data[position()]]"/> 

我想得到“abc”的结果,比如

a <- "abczzzzz"
b <- "rrrrabckkk"

检查了somefunction(a,b) > "abc" 包,但是,这些功能都需要我没有的已知模式,并且不可能知道模式的nchar,所以,我更喜欢最长的匹配模式。 请指教,谢谢。

UPDATE ---

事实上,我正在处理一个庞大的数据集,就像我只有传感器的描述一样,并且想要找出它所属的机器名称,而机器名称将是描述中最常用的词。逐字母比较是可行的,我仍然在寻找更有效的方法。谢谢!答案已经帮助我前进了很多。

1 个答案:

答案 0 :(得分:3)

我们可以在每个字符处拆分字符串,并使用intersect来获取常用字符串。

intersect(strsplit(a, "")[[1]], strsplit(b, "")[[1]])
#[1] "a" "b" "c"

要按要求获得准确的输出,我们可以paste将它们放在一起。

paste(intersect(strsplit(a, "")[[1]], strsplit(b, "")[[1]]), collapse = "")
#[1] "abc"

如果有多个字符串,我们可以使用Reduce(另请参阅here):

a <- "abczzzzz"
b <- "rrrrabckkk"
c <- "dsaqwabc"

paste(Reduce(intersect, strsplit(c(a, b, c), "")), collapse = "")
#[1] "abc"