Boşlukları veya sekmeleri test eden ancak yeni satırları test etmeyen normal bir ifadeye nasıl sahip olabilirim? Denedim \sama yeni satırları da test ettiğini öğrendim.
C # / WPF kullanıyorum ama önemli olmamalı.
Yanıtlar:
Karakter sınıflarını kullanın: [ \t]
\t?
@ Eiríkr Útlendi'nin belirttiği gibi, kabul edilen çözüm yalnızca iki beyaz boşluk karakterini dikkate alıyor: yatay sekme (U + 0009) ve bir kesme boşluğu (U + 0020). Bölünemez boşluklar gibi (ilgilenmeye çalıştığım metnin içinde olan) diğer boşluk karakterlerini dikkate almaz. Wikipedia'da daha eksiksiz bir boşluk karakter listesi bulunur ve ayrıca bağlantılı Perl yanıtında da başvurulur . Bu diğer karakterleri hesaba katan basit bir C # çözümü, karakter sınıfı çıkarımı kullanılarak oluşturulabilir
[\s-[\r\n]]
veya Eiríkr Útlendi'nin çözümü dahil,
[\s\u3000-[\r\n]]
Not: CJK metni (Çince, Japonca ve Korece) ile ilgilenenler için, şimdiye kadar denediğim herhangi bir uygulamaya çift baytlık alan (Unicode \u3000) dahil edilmemiştir\s (Perl, .NET, PCRE, Python). Önce dizelerinizi normalleştirmeniz gerekir (örneğin tümünü \u3000ile değiştirerek \u0020) ya da hedeflediğiniz diğer beyaz boşluklara ek olarak bu kod noktasını içeren bir karakter kümesi kullanmanız gerekir [ \t\u3000].
Perl veya PCRE kullanıyorsanız, diğerlerinin yanı sıra tek baytlık boşluk, çift baytlık boşluk ve sekme gibi görünen yatay beyaz boşluk için \hsteno kullanma seçeneğiniz vardır . Daha fazla ayrıntı için Boşluğu eşleştir, ancak satırsonu (Perl) iş parçacığına bakın.
Ancak, \hsöyleyebildiğim en iyi şekilde , bu kısaltma .NET ve C # için uygulanmadı.
\h(Java 8 tanıtılan) içermez \u3000, ancak \ssen (Java 7 tanıtılan) UNICODE_CHARACTER_CLASS modunu ayarlamak sürece değil.
Eğer değiştirmek istiyorsanız boşluk benim için çalıştı kodunun altınaC#
Regex.Replace(Line,"\\\s","");
Sekme için
Regex.Replace(Line,"\\\s\\\s","");
\h, ancak buradaki listeye eklemeniz gerekmesi durumunda başka birçok boşluk karakteri olduğunu gösterir.