2010-06-09 23 views
21

Çok sayıda klasöre, alt klasöre ve hepsinde dosya içeren bir dizine sahibim. Projemin düşüncesi tüm dizinde tekrarlamak, dosyaların tüm isimlerini toplamak ve geçersiz karakterleri (SharePoint geçişi için geçersiz) değiştirmektir. Bununla birlikte, Normal İfadeleri tamamen bilmiyorum. Dosya adlarında kurtulmam gereken karakterler: ~, #, %, &, *, { } , \, /, :, <>, ?, -, | ve "" Bu karakterleri boş bir boşlukla değiştirmek istiyorum. Tüm bu dosya adlarına bakmak ve değiştirmek için string.replace() yöntemini kullanmayı umuyordum. Şimdiye kadar aldığım tek kod özyineleme. Sürücüyü tarayan, bu dosyaların adlarını getiren ve bunları bir List<string>'a koyarak yinelemeyi düşünüyordum.Geçersiz karakterleri değiştirmek için RegEx'i kullanma

Herhangi bir kişi, belirli karakterlerle RegEx ile geçersiz karakterleri bulma/değiştirme konusunda bana yardımcı olabilir mi?

+5

"String.Replace" yeterli bir iş yaparsa neden 'RegEx' kullanmak istersiniz? – Oded

+0

Örneğin, geçersiz klasörler için bazı kurallar vardır. sonunda bir dönem. [SharePoint'te site adlarında, klasör adlarında ve dosya adlarında kullanamayacağınız karakterler hakkında bilgi] (https://support.microsoft.com/en-us/kb/905231) – sschoof

cevap

42
string pattern = "[\\~#%&*{}/:<>?|\"-]"; 
string replacement = " "; 

Regex regEx = new Regex(pattern); 
string sanitized = Regex.Replace(regEx.Replace(input, replacement), @"\s+", " "); 

Bu, boşluk boşluklarının yerini tek bir boşlukla değiştirecektir.

+2

'string pattern =" [\ \ ~ #% & * {} /: <>? | "-]"; 'daha iyi - daha az gereksiz kaçıyor. –

+0

@Tim teşekkürler! Çözümümüzü düzenleyeceğim. Regex deneyimimin çoğu, regex kullandığım Perl'de literals Yani tam olarak ne kaçınmak gerektiğinden ve C# ya da Java'da neyin olmadığı konusunda emin değilim. Çoğunlukla deneme-yanılma. –

+0

Sadece yeahumok'un geçersiz karakterleri bir boşlukla değiştirmek istediğini fark ettim. boş bir dize.O sürümü tekrar + 'kaldırdı, bir satırda birkaç olsa bile, her geçersiz karakter için bir boşluk istediğini bekleyerek tekrar ekledi: –

7

Ekstra boşluklardan kurtulmanın bir yolu var mı? Böyle

deneyin şey: o da (örneğin arama/Visual Studio içinde değiştirin) geliştirilmesinde çok yararlıdır olarak

string pattern = " *[\\~#%&*{}/:<>?|\"-]+ *"; 
string replacement = " "; 

Regex regEx = new Regex(pattern); 
string sanitized = regEx.Replace(input, replacement); 

, kendini a bit about regular expressions öğrenme düşünün.

+0

herhangi bir yabancıyı ortadan kaldırmak için herhangi bir yol var mı? Bir dosya adında (nokta): örneğin: 0.0.0.1.doc Bunu nasıl kaldırabilirim .doc? – yeahumok

İlgili konular