2015-01-13 4 views
6

मैं आर उपयोग कर रहा हूँ और नीचे निम्न स्ट्रिंग है:आर शुरुआत मैच गिनती

s <- "\t\t\t \t\t\thello world ! \t\t\thello" 

मैं स्ट्रिंग केवल, नहीं कहीं और के शुरू में व्हाइटस्पेस के मैच गिनती करना चाहते हैं। इसलिए सामग्री के बीच की जगहों को अनदेखा किया जाना चाहिए और केवल शुरुआत की जानी चाहिए। नतीजा यहां "9" होगा।

मैं निम्नलिखित की कोशिश की है लेकिन यह केवल "1" की गिनती देता है ...

sapply(regmatches(s, gregexpr('^(\\s)', s)), length) 

मैं regex पर बहुत अच्छा नहीं हूँ, किसी भी मदद की सराहना की है।

उत्तर

2

एक और तरीका जिसे आप हल कर सकते हैं \G के साथ एंकरिंग है। \G सुविधा एक एंकर है जो दो पदों में से एक पर मेल खा सकता है; स्ट्रिंग की शुरुआत, या उस बिंदु पर जहां अंतिम मैच का अंतिम चरित्र खपत होता है।

sapply(gregexpr("\\G\\s", s, perl = TRUE), length) 
# [1] 9 
3

पहली घटना मिलान के लिए, regexpr()gregexpr() की तुलना में अधिक उपयुक्त होगा। उस स्विच के परिणामस्वरूप, sapply() अब आवश्यक नहीं होगा क्योंकि regexpr() एक परमाणु वेक्टर देता है जबकि gregexpr() एक सूची देता है।

मिलान.लेथregexpr() के परिणाम से विशेषता को देखते हुए आप निम्नलिखित नियमित अभिव्यक्ति का उपयोग कर सकते हैं।

attr(regexpr("^\\s+", s), "match.length") 
# [1] 9 

नियमित अभिव्यक्ति का स्पष्टीकरण:

  • ^ फोर्स regex स्ट्रिंग की शुरुआत में किया जाना है।
  • \\s स्पेस कैरेक्टर: टैब, न्यूलाइन, वर्टिकल टैब, फॉर्म फीड, कैरिज रिटर्न, और स्पेस।
  • + पिछला आइटम एक या अधिक बार मिलान किया जाएगा।

संदर्भ: http://en.wikibooks.org/wiki/R_Programming/Text_Processing

+1

ओह कि के बारे में सोचा की ... – hwnd

+1

'attr, मैं चाहिए (regexpr ("^ \\ एस +", एस), "match.length") 'भी काम करता है। – thelatemail

+0

@thelatemail - दिलचस्प। तो एक टैब '\\ t' नियमित स्थान के रूप में पहचाना जाता है? मुझे नहीं पता था कि –

0

आप यह भी कोशिश कर सकते।

> sapply(gregexpr("[^\\h].*(*SKIP)(*F)|\\h", s, perl = TRUE), length) 
[1] 9 
> sapply(gregexpr("\\S.*(*SKIP)(*F)|\\h", s, perl = TRUE), length) 
[1] 9 

\\h क्षैतिज रिक्त स्थान से मेल खाता है। \S एक गैर-स्पेस वर्ण से मेल खाता है और निम्न .* लाइन अंत तक गैर-स्पेस वर्ण के बाद सभी वर्णों से मेल खाता है। (*SKIP)(*F) मैच को विफल करने के लिए बनाता है। और | है कि करने के लिए अगले भाग, \h सभी शेष क्षैतिज रिक्त स्थान से मेल खाता है (यानी, रिक्त स्थान है जो शुरू में मौजूद हैं।)