Jawaban:
string s = "søme string";
s = Regex.Replace(s, @"[^\u0000-\u007F]+", string.Empty);
Berikut adalah solusi .NET murni yang tidak menggunakan ekspresi reguler:
string inputString = "Räksmörgås";
string asAscii = Encoding.ASCII.GetString(
Encoding.Convert(
Encoding.UTF8,
Encoding.GetEncoding(
Encoding.ASCII.EncodingName,
new EncoderReplacementFallback(string.Empty),
new DecoderExceptionFallback()
),
Encoding.UTF8.GetBytes(inputString)
)
);
Ini mungkin terlihat rumit, tetapi harus intuitif. Menggunakan pengkodean .NET ASCII untuk mengonversi string. UTF8 digunakan selama konversi karena dapat mewakili karakter asli. Ia menggunakan EncoderReplacementFallback untuk mengubah karakter non-ASCII menjadi string kosong.
Jika Anda tidak ingin menghapus, tetapi untuk benar-benar mengubah aksen latin ke karakter non-aksen, lihat pertanyaan ini: Bagaimana cara menerjemahkan 8bit karakter menjadi 7bit karakter? (yaitu Ü to U)
Terinspirasi oleh solusi Regular Expression dari philcruz , saya telah membuat solusi LINQ murni
public static string PureAscii(this string source, char nil = ' ')
{
var min = '\u0000';
var max = '\u007F';
return source.Select(c => c < min ? nil : c > max ? nil : c).ToText();
}
public static string ToText(this IEnumerable<char> source)
{
var buffer = new StringBuilder();
foreach (var c in source)
buffer.Append(c);
return buffer.ToString();
}
Ini adalah kode yang belum diuji.
return new string( source.Where( c => c >= min && c <= max ).ToArray() );
tidak perlu regex. cukup gunakan pengodean ...
sOutput = System.Text.Encoding.ASCII.GetString(System.Text.Encoding.ASCII.GetBytes(sInput));
????nacho??
ketika saya mencoba: たまねこnachoなち
di mono 3.4
Saya menemukan kisaran berikut yang sedikit diubah berguna untuk mem-parsing blok komentar dari database, ini berarti Anda tidak perlu bersaing dengan tab dan melarikan diri karakter yang akan menyebabkan bidang CSV menjadi marah.
parsememo = Regex.Replace(parsememo, @"[^\u001F-\u007F]", string.Empty);
Jika Anda ingin menghindari karakter khusus atau tanda baca tertentu, periksa tabel ascii
Saya datang ke sini mencari solusi untuk karakter ascii yang diperluas, tetapi tidak dapat menemukannya. Yang paling dekat yang saya temukan adalah solusi bzlm . Tapi itu hanya berfungsi untuk ASCII Code hingga 127 (jelas Anda dapat mengganti jenis pengkodean dalam kodenya, tetapi saya pikir itu agak rumit untuk dipahami. Oleh karena itu, bagikan versi ini). Berikut adalah solusi yang berfungsi untuk kode ASCII yang diperluas yaitu hingga 255 yang merupakan ISO 8859-1
Ia menemukan dan menghapus karakter non-ascii (lebih dari 255)
Dim str1 as String= "â, ??î or ôu🕧� n☁i✑💴++$-💯♓!🇪🚑🌚‼⁉4⃣od;/⏬'®;😁☕😁:☝)😁😁///😍1!@#"
Dim extendedAscii As Encoding = Encoding.GetEncoding("ISO-8859-1",
New EncoderReplacementFallback(String.empty),
New DecoderReplacementFallback())
Dim extendedAsciiBytes() As Byte = extendedAscii.GetBytes(str1)
Dim str2 As String = extendedAscii.GetString(extendedAsciiBytes)
console.WriteLine(str2)
'Output : â, ??î or ôu ni++$-!‼⁉4od;/';:)///1!@#$%^yz:
Ini biola yang berfungsi untuk kodenya
Ganti pengkodean sesuai kebutuhan, sisanya harus tetap sama.
Ini bukan kinerja-bijaksana yang optimal, tetapi pendekatan Linq cukup lurus ke depan:
string strippedString = new string(
yourString.Where(c => c <= sbyte.MaxValue).ToArray()
);
Kelemahannya adalah bahwa semua karakter yang "bertahan" pertama kali dimasukkan ke dalam array tipe char[]
yang kemudian dibuang setelah string
konstruktor tidak lagi menggunakannya.
Saya menggunakan ungkapan regex ini:
string s = "søme string";
Regex regex = new Regex(@"[^a-zA-Z0-9\s]", (RegexOptions)0);
return regex.Replace(s, "");
Saya menggunakan persamaan reguler ini untuk memfilter karakter buruk dalam nama file.
Regex.Replace(directory, "[^a-zA-Z0-9\\:_\- ]", "")
Itu harus semua karakter yang diizinkan untuk nama file.