2011-08-14 26 views
5

dize aşağıda gibi olduğunu varsayalım: ben hem <a> ve <c> kaldırmak istediğinizAr gsub kullanarak parantez çifti içinde bir şey çıkarmak

<a>b<c> 

, ancak bu b kaldıracak gibi ben gsub("<.*>","","<a>b<c>") kullanamazsınız Ayrıca.

Daha önce benzer bir soru sordum, ama ikinci bir düşüncede, genel olarak bu tür sorunlarla nasıl başa çıkacağımı öğrenmeliyim. Teşekkürler.

+1

Daha genel çözüm, çözümleyici kullanmaktır. Kaçan sembollerin olmadığından, her sembolün eşleştiğinden, bu yuvalamanın gerçekleşmediğinden ve diğer uyarılar olmadığından emin değilseniz, bir ayrıştırıcı kullanmak en iyisidir. Normal ifadeler ve HTML hakkında SO hakkında oldukça ünlü bir soru var. HTML'den bahsetmemiş olmanıza rağmen, HTML ve XML gibi biçimlendirme dilleri yönünde yönlendirilmiş gibi görünüyorsunuz. – Iterator

cevap

11

parantez şeyler bir kapanış parantezi > izin vermeyin: gürültülü ortamlarda

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

Örneğin, açgözlü olmayan bir ifade kullanabilirsiniz. /<.*?>/.

Bu yalnızca basit HTML için çalışacak ve kolayca alt edilebilecek. Normal ifadeleri kullanarak kolayca kaldırılamayacak aşağıdaki HTML'yi düşünün.

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

hayır, tamam değil > gsub ("/ <.*> /", "", " b ") [1]" b " – lokheart

+3

Bir kaçırmış '?' regex içinde. –

4

Bir daha fikir genellikle oldukça faydalıdır (yani bir dizgeciklerini yapım daha yakın gelince) :

strsplit("<a>b<c>",split='<|>')[[1]][3] 
İlgili konular