Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何将重复字母表替换为一个字母表_R_Regex - Fatal编程技术网

R 如何将重复字母表替换为一个字母表

R 如何将重复字母表替换为一个字母表,r,regex,R,Regex,假设我有一个重复字母的向量,如下所示: x <- c("b b b b", "a a ") "b", "a" 我已经找到了其他解决方案来删除重复项,但它们都涉及到字符向量,而不是中间有空格的字符串。有什么建议吗?这里有一个使用sub的基于正则表达式的方法。首先,我删除字符串中的所有空格。然后,我对以下模式进行替换: (.)\\1{1,} 我将替换为\\1。这里的逻辑是匹配并捕获一个字母,然后将其与后面的任何相同字母一起替换为该字母。这实际上就是你想要的 x <- c("b b

假设我有一个重复字母的向量,如下所示:

x <- c("b b b b", "a a ")
"b", "a"

我已经找到了其他解决方案来删除重复项,但它们都涉及到字符向量,而不是中间有空格的字符串。有什么建议吗?

这里有一个使用sub的基于正则表达式的方法。首先,我删除字符串中的所有空格。然后,我对以下模式进行替换:

(.)\\1{1,}
我将替换为\\1。这里的逻辑是匹配并捕获一个字母,然后将其与后面的任何相同字母一起替换为该字母。这实际上就是你想要的

x <- c("b b b b","a a ")
x <- gsub("\\s+", "", x)

result <- gsub("(.)\\1{1,}", "\\1", x)
result
[1] "b" "a"

下面是一种使用sub的基于正则表达式的方法。首先,我删除字符串中的所有空格。然后,我对以下模式进行替换:

(.)\\1{1,}
我将替换为\\1。这里的逻辑是匹配并捕获一个字母,然后将其与后面的任何相同字母一起替换为该字母。这实际上就是你想要的

x <- c("b b b b","a a ")
x <- gsub("\\s+", "", x)

result <- gsub("(.)\\1{1,}", "\\1", x)
result
[1] "b" "a"

您可以执行以下操作。R具有内置的常量字母。将x分隔为单个字符,并在此基础上对字母进行子集

letters[letters %in% unlist(strsplit(x, ' '))]

[1] "a" "b"

您可以执行以下操作。R具有内置的常量字母。将x分隔为单个字符,并在此基础上对字母进行子集

letters[letters %in% unlist(strsplit(x, ' '))]

[1] "a" "b"

在R中使用字符串的另一个漂亮的包是tidyverse中的stringr

首先删除所有多余的空格,然后将字符串拆分为字符


这个解决方案有点冗长,但本质上与的答案相同。尽管我认为像我这样的正则表达式新手更容易理解。

另一个在R中处理字符串的漂亮软件包是tidyverse中的stringr

首先删除所有多余的空格,然后将字符串拆分为字符

这个解决方案有点冗长,但本质上与的答案相同。尽管我认为像我这样的正则表达式新手更容易理解