Normal ifade: boşlukları bulun (sekmeler / boşluk) ancak satırsonu bulun


97

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:


193

Karakter sınıflarını kullanın: [ \t]


1
Sorunum için dikkat edin. Yalnızca perl karakter sınıfı için stackoverflow.com/a/25956935/292060'a da bakın \h, ancak buradaki listeye eklemeniz gerekmesi durumunda başka birçok boşluk karakteri olduğunu gösterir.
goodeye

3
neden daha önce bir boşluk olmalı \t?
Ooker

4
@Ooker Gerçek bir alanı yakalamak için
codemonkee

Bu, diğer yanıtların da belirttiği gibi, diğer tür boşluklarla eşleşmeyecektir.
Gus

1
Neden önce boşluk?
Catbuilts

36

Bu karakter setini deneyin:

[ \t]

Bu yalnızca bir boşluk veya bir tablodan eşleşir.


14

@ 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]]

3

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ı.


1
İyi bir nokta. Java'nın \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.
Alan Moore

0

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","");

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.