2012-11-14 13 views
7

को छोड़कर सभी विराम चिह्नों को खत्म करें मेरे पास निम्न रेगेक्स है जो किसी भी स्थान या विराम चिह्न पर विभाजित है। मैं :punct: से 1 या अधिक विराम चिह्नों को कैसे बहिष्कृत कर सकता हूं? मान लीजिए कि मैं एस्ट्रोफ़ेस और कॉमा को बाहर करना चाहता हूं। मुझे पता है कि मैं [[:punct:]] के बजाय स्पष्ट रूप से [all punctuation marks in here] का उपयोग कर सकता हूं लेकिन मैं एक बहिष्करण विधि की उम्मीद कर रहा हूं।रेगेक्स;

X <- "I'm not that good at regex yet, but am getting better!" 
strsplit(X, "[[:space:]]|(?=[[:punct:]])", perl=TRUE) 

[1] "I"  "'"  "m"  "not"  "that" "good" "at"  "regex" "yet"  
[10] ","  ""  "but"  "am"  "getting" "better" "!" 

उत्तर

8

यह मेरे लिए स्पष्ट नहीं है कि तुम क्या परिणाम होना चाहता हूँ, लेकिन आप नकारात्मक कक्षाएं like this answer उपयोग करने में सक्षम हो सकता है।

R> strsplit(X, "[[:space:]]|(?=[^,'[:^punct:]])", perl=TRUE)[[1]] 
[1] "I'm"  "not"  "that" "good" "at"  "regex" "yet," 
[8] "but"  "am"  "getting" "better" "!"  
+1

मेरा सिर दर्द होता है ... –

0

आप एक (?![',])negative lookahead उस मैच में विफल रहता है, तो सही करने के लिए अगले चार ' या , है के साथ सीधे एक PCRE subpattern करने के लिए एक प्रतिबंध लगाया जा सकता है:

[[:space:]]|(?=(?![',])[[:punct:]]) 
       ^^^^^^^^ 

regex demo देखें।

विवरण

  • [[:space:]] - किसी भी खाली स्थान के
  • | - या
  • (?=(?![',])[[:punct:]]) - एक सकारात्मक अग्रदर्शी कि कि, तुरंत वर्तमान स्थिति का सही करने के लिए, कोई ' और , की आवश्यकता है और यह कि कोई भी 1 विराम चिह्न है जो ' या , नहीं है (प्रभावी रूप से,के अलावा किसी भी विराम चिह्न का प्रतीक होना आवश्यक हैऔर ,)।

देखें R online demo

X <- "I'm not that good at regex yet, but am getting better!" 
strsplit(X, "[[:space:]]|(?=(?![',])[[:punct:]])", perl=TRUE) 
[[1]] 
[1] "I'm"  "not"  "that" "good" "at"  "regex" "yet," 
[8] "but"  "am"  "getting" "better" "!"