如何在字符串中找到相同的模式?
how can I find same pattern among strings?
我想从字符串中提取相同的模式,比如说
a <- "abczzzzz"
b <- "rrrrabckkk"
我想得到"abc"的结果,喜欢
somefunction(a,b)
> "abc"
查看了stringr
包,但是,这些函数都需要已知的模式,我没有,而且不可能知道模式的nchar,所以,我更喜欢最长的匹配模式。
请指教,谢谢
更新---
事实上,我正在处理一个庞大的数据集,就像我只有传感器的描述一样,想找出它所属的机器名称,而机器名称将是描述中出现频率最高的词.逐个字母比较是可行的,我仍在寻找更有效的方法。谢谢!答案已经帮助我向前迈进了很多。
我们可以在每个字符处拆分字符串并使用 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"
我想从字符串中提取相同的模式,比如说
a <- "abczzzzz"
b <- "rrrrabckkk"
我想得到"abc"的结果,喜欢
somefunction(a,b)
> "abc"
查看了stringr
包,但是,这些函数都需要已知的模式,我没有,而且不可能知道模式的nchar,所以,我更喜欢最长的匹配模式。
请指教,谢谢
更新---
事实上,我正在处理一个庞大的数据集,就像我只有传感器的描述一样,想找出它所属的机器名称,而机器名称将是描述中出现频率最高的词.逐个字母比较是可行的,我仍在寻找更有效的方法。谢谢!答案已经帮助我向前迈进了很多。
我们可以在每个字符处拆分字符串并使用 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"