एक स्ट्रिंग से सभी व्हाट्सएप कैसे निकालें?


152

तो " xx yy 11 22 33 "बन जाएगा"xxyy112233" । इसे कैसे प्राप्त किया जा सकता है?

जवाबों:


258

सामान्य तौर पर, हम ऐसा समाधान चाहते हैं जो सदिश हो, इसलिए यहां एक बेहतर परीक्षा उदाहरण है:

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

आधार आर दृष्टिकोण: gsub

gsubएक स्ट्रिंग ( fixed = TRUE) या नियमित अभिव्यक्ति ( fixed = FALSE, डिफ़ॉल्ट) के सभी उदाहरणों को दूसरे स्ट्रिंग के साथ बदल देता है । सभी रिक्त स्थान निकालने के लिए, उपयोग करें:

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

जैसा कि डीडिन ने नोट किया, इस मामले में 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एक भाषा-स्वतंत्र नियमित-अभिव्यक्ति है जो समान कार्य करती है।


stringrदृष्टिकोण: str_replace_allऔरstr_trim

stringrआधार R फ़ंक्शंस के आसपास अधिक मानव-पठनीय रैपर प्रदान करता है (हालांकि दिसंबर 2014 के अनुसार, विकास संस्करण में ऊपर की ओर एक शाखा बनी है stringi, जिसका उल्लेख नीचे किया गया है)। [ str_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      

stringiदृष्टिकोण:stri_replace_all_charclassऔरstri_trim

stringiप्लेटफ़ॉर्म-स्वतंत्र ICU लाइब्रेरी पर बनाया गया है , और इसमें स्ट्रिंग हेरफेर कार्यों का एक व्यापक सेट है। समकक्ष ऊपर के होते हैं:

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

यहाँ "\\p{WHITE_SPACE}"एक यूनिकोड कोड बिंदु के सेट के लिए एक वैकल्पिक वाक्यविन्यास है, जिसे व्हॉट्सएप माना जाता है "[[: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
@Aniko। क्या कोई कारण है जिसे आपने निश्चित किया है = TRUE?
IRTFM

2
@ डब्लिन मान लें कि यह तेजी से होता है यदि R को पता है कि उसे नियमित एक्सप्रेशन सामान नहीं लाना है। इस मामले में वास्तव में इससे कोई फर्क नहीं पड़ता है, मैं बस ऐसा करने की आदत में हूं।
अनीको

क्या आपस में "[[:space:]]"और कोई फर्क है "\\s"?
सच्चा ईप्सकैंप

5
अगर आप flyordie.sin.khk.be/2011/05/04/day-35-replacing-characters पर चेक करते हैं या सिर्फ regex टाइप करते हैं, तो आप देखते हैं कि [: space:] का उपयोग "Space characters: tab, newline के लिए किया जाता है। , ऊर्ध्वाधर टैब, फॉर्म फ़ीड, गाड़ी वापसी, और स्थान। " यह अकेले अंतरिक्ष की तुलना में बहुत अधिक है
सर केसिलम

1
@Aniko आशा है कि आप बड़े संपादन के बारे में बुरा नहीं मानते। चूंकि यह प्रश्न अत्यधिक लोकप्रिय है, इसलिए यह उत्तर की तरह लग रहा था कि इसे और अधिक गहन होना चाहिए।
रिची कॉटन

18

मैंने अभी "stringr" पैकेज के बारे में सीखा है कि str_trim (,, साइड = "दोनों") के साथ एक स्ट्रिंग की शुरुआत और अंत से सफेद स्थान को हटाने के लिए, लेकिन इसमें एक प्रतिस्थापन कार्य भी है ताकि:

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

[1] "xxyy112233"

3
स्ट्रिंग पैकेज हर एन्कोडिंग के साथ अच्छी तरह से काम नहीं करता है। स्ट्रिंग पैकेज बेहतर समाधान है, अधिक जानकारी के लिए github.com/Rexamine/stringi
bartektartanus

8

कृपया ध्यान दें कि ऊपर लिखी आत्माएँ केवल स्थान को हटाती हैं। यदि आप भी पैकेज stri_replace_all_charclassसे टैब या नई लाइन का उपयोग करना चाहते हैं stringi

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

4
stringiपैकेज अब CRAN पर है, आनंद लें! :)
bartektartanus

1
ऊपर यह आदेश गलत है। सही तरीका स्ट्रिप_रेप्ले_ल_चारक्लास ("अला \ t मा \ n कोटा", "\\ p {WHITE_SPACE}", "")
लुकास फोर्टिनी

5
stringiकुछ महीनों के लिए उपयोग करने के बाद और देखा / सीखा कि यह कितना शक्तिशाली और कुशल है, यह स्ट्रिंग ऑपरेशन के लिए मेरा गो-टू-पैकेज बन गया है। आप लोगों ने इसके साथ बहुत बढ़िया काम किया।
रिच स्क्रिप्न

7

[[:blank:]]किसी भी प्रकार के क्षैतिज व्हाइट_स्पेस वर्णों का मिलान करने के लिए उपयोग करें ।

gsub("[[:blank:]]", "", " xx yy 11 22  33 ")
# [1] "xxyy112233"


4

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
कृपया कोड से लिंक न करें। इसे अपने उत्तर के टेक्स्ट बॉडी में जोड़ें और अपने उत्तर को और अधिक लंबा मान देने के लिए इसे यहाँ समझाएँ।
आर बालसुब्रमण्यन

धन्यवाद @Ralasubramanian मुझे इस दिशानिर्देश की याद दिलाने के लिए। मैं भविष्य में इसका पालन करूंगा।
डेमियानोल्डोनी

मैं यह नहीं देखता कि यह सवाल का जवाब कैसे देता है। str_squishसभी रिक्त स्थान नहीं निकालता है। यह सिर्फ एक के लिए कई स्थानों को ट्रिम और स्थानापन्न करता है।
नेटल

0

इस तरह से आप अपने डेटा फ़्रेम में सभी वर्ण चर से सभी रिक्त स्थान निकाल सकते हैं। यदि आप केवल कुछ चर का चयन करना चाहते हैं, तो उपयोग करें mutateया mutate_at

library(dplyr)
library(stringr)

remove_all_ws<- function(string){
    return(gsub(" ", "", str_squish(string)))
}

df<-df %>%  mutate_if(is.character, remove_all_ws)

-1

स्ट्रिंग लाइब्रेरी से आप यह कोशिश कर सकते हैं:

  1. लगातार भरने वाले रिक्त स्थान निकालें
  2. रिक्त को भरें

    पुस्तकालय (stringr)

                2.         1.
                |          |
                V          V
    
        str_replace_all(str_trim(" xx yy 11 22  33 "), " ", "")
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.