如何从字符串中删除所有空格?

How to remove all whitespace from a string?

提问人:waanders 提问时间:5/13/2011 最后编辑:oguz ismailwaanders 更新时间:7/22/2021 访问量:429800

问:

所以会变成.我怎样才能做到这一点?" xx yy 11 22 33 ""xxyy112233"

正则表达式 字符串 R-FAQ

评论


答:

315赞 Aniko 5/13/2011 #1

一般来说,我们想要一个矢量化的解决方案,所以这里有一个更好的测试示例:

whitespace <- " \t\n\r\v\f" # space, tab, newline, 
                            # carriage return, vertical tab, form feed
x <- c(
  " x y ",           # spaces before, after and in between
  " \u2190 \u2192 ", # contains unicode chars
  paste0(            # varied whitespace     
    whitespace, 
    "x", 
    whitespace, 
    "y", 
    whitespace, 
    collapse = ""
  ),   
  NA                 # missing
)
## [1] " x y "                           
## [2] " ← → "                           
## [3] " \t\n\r\v\fx \t\n\r\v\fy \t\n\r\v\f"
## [4] NA

基本 R 方法:gsub

gsub 将字符串 () 或正则表达式 (默认值) 的所有实例替换为另一个字符串。要删除所有空格,请使用:fixed = TRUEfixed = FALSE

gsub(" ", "", x, fixed = TRUE)
## [1] "xy"                            "←→"             
## [3] "\t\n\r\v\fx\t\n\r\v\fy\t\n\r\v\f" NA 

正如 DWin 所指出的,在这种情况下不是必需的,但性能略好一些,因为匹配固定字符串比匹配正则表达式更快。fixed = TRUE

如果要删除所有类型的空格,请使用:

gsub("[[:space:]]", "", x) # note the double square brackets
## [1] "xy" "←→" "xy" NA 

gsub("\\s", "", x)         # same; note the double backslash

library(regex)
gsub(space(), "", x)       # same

“[:space:]” 是匹配所有空格字符的特定于 R 的正则表达式组。 是一个与语言无关的正则表达式,它执行相同的操作。\s


方法:和stringrstr_replace_allstr_trim

stringr围绕基本 R 函数提供了更多人类可读的包装器(尽管截至 2014 年 12 月,开发版本有一个构建在 之上的分支,如下所述)。使用 [,上述命令的等效项是:stringistr_replace_all][3]

library(stringr)
str_replace_all(x, fixed(" "), "")
str_replace_all(x, space(), "")

stringr还具有str_trim功能,仅删除前导和尾随空格。

str_trim(x) 
## [1] "x y"          "← →"          "x \t\n\r\v\fy" NA    
str_trim(x, "left")    
## [1] "x y "                   "← → "    
## [3] "x \t\n\r\v\fy \t\n\r\v\f" NA     
str_trim(x, "right")    
## [1] " x y"                   " ← →"    
## [3] " \t\n\r\v\fx \t\n\r\v\fy" NA      

方法:和stringistri_replace_all_charclassstri_trim

stringi基于独立于平台的 ICU 库构建,并具有一组广泛的字符串操作函数。上述等价物是:

library(stringi)
stri_replace_all_fixed(x, " ", "")
stri_replace_all_charclass(x, "\\p{WHITE_SPACE}", "")

此处“\\p{WHITE_SPACE}”是被视为空格的 Unicode 码位集的替代语法,等效于 、 和 。对于更复杂的正则表达式替换,还有 ."[[:space:]]""\\s"space()stri_replace_all_regex

stringi还具有修剪功能

stri_trim(x)
stri_trim_both(x)    # same
stri_trim(x, "left")
stri_trim_left(x)    # same
stri_trim(x, "right")  
stri_trim_right(x)   # same

评论

2赞 IRTFM 5/13/2011
@Aniko。您使用 fixed=TRUE 有什么原因吗?
2赞 Aniko 5/13/2011
@DWin 据说,如果 R 知道它不必调用正则表达式的东西,它会更快。在这种情况下,它并没有真正的区别,我只是习惯于这样做。
1赞 Sacha Epskamp 5/13/2011
和 之间有区别吗?"[[:space:]]""\\s"
7赞 Sir Ksilem 5/13/2011
如果您检查 flyordie.sin.khk.be/2011/05/04/day-35-replacing-characters 或只输入 ?regex,您会看到 [:space:] 用于“空格字符:制表符、换行符、垂直制表符、表单进纸、回车符和空格”。这不仅仅是空间
1赞 Richie Cotton 12/31/2014
@Aniko 希望你不介意大编辑。由于这个问题非常受欢迎,看起来答案需要更彻底。
32赞 JollyRoger 6/26/2013 #2

我刚刚学习了“stringr”包,用于使用 str_trim( , side=“both”) 删除字符串开头和结尾的空格,但它也具有替换功能,以便:

a <- " xx yy 11 22 33 " 
str_replace_all(string=a, pattern=" ", repl="")

[1] "xxyy112233"

评论

4赞 bartektartanus 2/20/2014
stringr 包不适用于每种编码。stringi 包是更好的解决方案,有关更多信息,请查看 github.com/Rexamine/stringi
10赞 bartektartanus 7/16/2013 #3

请注意,上面写的 soultions 仅删除空格。如果您还想从包中删除制表符或换行符,请使用。stri_replace_all_charclassstringi

library(stringi)
stri_replace_all_charclass("   ala \t  ma \n kota  ", "\\p{WHITE_SPACE}", "")
## [1] "alamakota"

评论

5赞 bartektartanus 3/15/2014
stringi套餐现在在CRAN上,尽情享受吧!:)
1赞 Lucas Fortini 8/7/2014
上面的命令不正确。正确的方法是 stri_replace_all_charclass(“ ala \t 马 \n kota ”, “\\p{WHITE_SPACE}”, “”)
5赞 Rich Scriven 12/29/2014
在使用了几个月并看到/了解了它的强大和高效之后,它已成为我用于字符串操作的首选软件包。你们做得很好。stringi
20赞 Avinash Raj 10/1/2015 #4

用于匹配任何类型的横white_space字符。[[:blank:]]

gsub("[[:blank:]]", "", " xx yy 11 22  33 ")
# [1] "xxyy112233"
22赞 ZWL 9/26/2017 #5
x = "xx yy 11 22 33"

gsub(" ", "", x)

> [1] "xxyy112233"
10赞 damianooldoni 8/7/2018 #6

tidyverse软件包中的功能具有魔力!str_squish()stringr

library(dplyr)
library(stringr)

df <- data.frame(a = c("  aZe  aze s", "wxc  s     aze   "), 
                 b = c("  12    12 ", "34e e4  "), 
                 stringsAsFactors = FALSE)
df <- df %>%
  rowwise() %>%
  mutate_all(funs(str_squish(.))) %>%
  ungroup()
df

# A tibble: 2 x 2
  a         b     
  <chr>     <chr> 
1 aZe aze s 12 12 
2 wxc s aze 34e e4

评论

4赞 R Balasubramanian 8/7/2018
请不要链接到代码。将其添加到答案的文本正文中并在此处进行解释,以使您的答案更具长期价值。
0赞 damianooldoni 8/9/2018
感谢@RBalasubramanian提醒我这个准则。我以后会遵循它。
4赞 Nettle 8/17/2018
我不明白这如何回答这个问题。 不会删除所有空格。它只是修剪多个空格并将其替换为一个空格。str_squish
-1赞 Data Jules 8/30/2018 #7

从stringr库中,你可以试试这个:

  1. 删除连续的填充空白
  2. 删除填充空白

    库(串口)

                2.         1.
                |          |
                V          V
    
        str_replace_all(str_trim(" xx yy 11 22  33 "), " ", "")
    

评论

0赞 Sky Scraper 6/15/2023
只删除空格和制表符,而不是换行符
6赞 Tho Vu 8/10/2020 #8

可以考虑另一种方法

library(stringr)
str_replace_all(" xx yy 11 22  33 ", regex("\\s*"), "")

#[1] "xxyy112233"

\\s:匹配空格、制表符、垂直制表符、换行符、表单进取符、回车符

*:至少匹配 0 次

评论

0赞 Sky Scraper 12/23/2022
需要注意的是,regex() 命令也来自 stringr 包。
3赞 Onkar Kokane 7/22/2021 #9
income<-c("$98,000.00 ", "$90,000.00 ", "$18,000.00 ", "")

使用该功能后删除空间。.00trimws()

income<-trimws(income)