2011-08-14 9 views
5

मैं नीचे की तरह स्ट्रिंग मान लीजिए: मैं दोनों <a> और <c> निकालना चाहतेआर में gsub का उपयोग कर कोष्ठक की एक जोड़ी के भीतर कुछ भी निकालें

<a>b<c> 

, लेकिन मैं gsub("<.*>","","<a>b<c>") उपयोग नहीं कर सकते के रूप में इस b निकाल देंगे भी।

मैंने पहले एक समान सवाल पूछा, लेकिन एक दूसरे विचार पर, मुझे लगता है कि मुझे सामान्य रूप से सीखना चाहिए, इस तरह की समस्याओं से निपटने के लिए कैसे। धन्यवाद।

+1

अधिक सामान्य समाधान एक पार्सर का उपयोग करना है। जब तक आप सुनिश्चित न हों कि कोई बच निकले प्रतीक नहीं हैं, कि हर प्रतीक का मिलान होता है, कि घोंसला नहीं होता है, और कई अन्य चेतावनी, एक पार्सर का उपयोग करना सबसे अच्छा है। नियमित अभिव्यक्तियों और HTML के बारे में SO पर एक सुंदर प्रसिद्ध प्रश्न है। यद्यपि आपने HTML का उल्लेख नहीं किया है, ऐसा लगता है कि आप HTML और XML जैसी मार्कअप भाषाओं की दिशा में आगे बढ़ सकते हैं। – Iterator

उत्तर

11

कोष्ठक के बीच सामान में एक बंद कोष्ठक > अनुमति न दें:

z <- "<a>b<c>" 
gsub("<[^>]+>","",z) 
4

आप एक गैर लालची regex, उदाहरण के लिए उपयोग कर सकते हैं। /<.*?>/

यह केवल सरल HTML के लिए काम करेगा और आसानी से बदला जा सकता है। निम्नलिखित HTML पर विचार करें, जिसे नियमित अभिव्यक्तियों का उपयोग करके आसानी से हटाया नहीं जा सकता है।

<span title="Help > Index"> 
+0

नहीं, ठीक नहीं > gsub ("/ <.*> /", "", "") [1] "" – lokheart

+3

आप एक चूक '?' रेगेक्स में –

4

एक और विचार है, अक्सर काफी शोर सेटिंग में उपयोगी (यानी जब यह एक tokenizer बनाने के नजदीक आता है) :

strsplit("<a>b<c>",split='<|>')[[1]][3] 
संबंधित मुद्दे