Dize

2013-03-20 26 views
5

dışındaki denetim tabloları dışındaki yazdırılamayan utf8 karakterleri kaldırın Metin, kontrol karakterleri, rakamlar, boşluklar (Almanca) ve diğer utf8 karakterleri içeren bir Dize var.Dize

"Dilin bir parçası" olmayan tüm utf8 karakterleri kesmek istiyorum. Özel karakterler (tam liste dışı) ":/\ ßä,; \ n \ t" gibi hepsi korunmalıdır.

Ne yazık ki stackoverflow tüm bu karakterleri kaldırır, böylece bir resim eklemem gerekir (link).

Herhangi bir fikrin var mı? Yardım çok takdir edilir! Herkes mutlu Sadece bir tanesini bulmak mümkün değildi .. Dizelerinizi yüklemek istiyorsunuz bu özel karakterleri öldürmek değil bir yapıştırma hizmeti ..

[Düzenle] biliyorum yoksa:

PS BENCE regex "\ P {Cc}", PRESERVE yapmak istediğim karakterlerdir. Bu regex tersine çevrilebilir mi, dolayısıyla bu regex ile uyuşmayan tüm karakterler döndürülmeli mi?

+0

Emin değilim, ancak \ P {şey} 'in tersine çevrilmiş sürümünün \ p {şey} olması olasıdır. Eğer değilse [^ \ P {something}] ile deneyebilirsiniz. – Pshemo

+0

@Pshemo yeah indead küçük harf aşağıya olduğu gibi çalışmış gibi görünüyor .. teşekkürler! – friesoft

+0

Olası çoğaltılabilir [Yazdırılabilir tüm karakterleri bir Java Dizgisinden ayırmanın en hızlı yolu] (http://stackoverflow.com/questions/7161534/fastest-way-to-strip-all-non-printable-characters-from- a-java-string) – Stewart

cevap

8

Zaten Unicode karakter özelliklerini bulduk.

Sen lider "p"

örneğin harf değiştirerek, karakter özelliği evirebilirsiniz

\p{L} maçları tüm harfler

\P{L} maçlar mülkiyet harfi yoktur bütün karakterler.

\P{Cc}'un ihtiyacınız olan şey olduğunu düşünüyorsanız, \p{Cc} karşı tarafla eşleşecektir. regular-expressions.info

üzerinde

Daha fazla detay Ben, bu içermez, örneğin \p{Cc} istediğini yakındır oldukça emin değilim, ama dikkatli olun sekme (0x09), Satır Besleme (0x0A) ve Taşıma dönüşü (0x0D).

Ama bu gibi kendi karakter sınıfını oluşturabilirsiniz:

[^\P{Cc}\t\r\n] 

Bu sınıf [^...] bir negatif karakter sınıfı, bu nedenle bu yüzden, (çift inkârcılığının "karakteri kontrol değil" değil herşeyi eşleşir kontrol karakterleri ile eşleşir, ve değil, CR ve LF sekmesi.

+0

Çok güzel! Şimdiye kadar bilmiyordum ... sanırım gerçekten daha fazla regex dersi okumalıyım ... – friesoft

+0

oh ama bekle .. bu da linebreaks kaldırır .. korunmalıdır .. – friesoft

+0

@friesoft linebreak düzenli ifade 's r | \ n | \ r \ n', yani '\ p {Cc} | \ r | \ n | \ r \ n' ihtiyaçlarınızı karşılamalıdır. – sp00m

0

kullanabilirsiniz,

your_string.replaceAll("\\p{C}", ""); 
+2

hayır çok fazla kaldırır ama @stema cevabı zaten işe yarar :) – friesoft