Antworten:
string s = "søme string";
s = Regex.Replace(s, @"[^\u0000-\u007F]+", string.Empty);
Hier ist eine reine .NET-Lösung, die keine regulären Ausdrücke verwendet:
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)
)
);
Es mag umständlich aussehen, sollte aber intuitiv sein. Es verwendet die .NET ASCII-Codierung, um eine Zeichenfolge zu konvertieren. UTF8 wird während der Konvertierung verwendet, da es jedes der ursprünglichen Zeichen darstellen kann. Es verwendet einen EncoderReplacementFallback, um jedes Nicht-ASCII-Zeichen in eine leere Zeichenfolge zu konvertieren.
Wenn Sie nicht streifen möchten, sondern tatsächlich lateinische Akzente in nicht akzentuierte Zeichen konvertieren möchten, werfen Sie einen Blick auf diese Frage: Wie übersetze ich 8-Bit-Zeichen in 7-Bit-Zeichen? (dh Ü bis U)
Inspiriert von Philcruz 'Regular Expression-Lösung habe ich eine reine LINQ-Lösung entwickelt
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();
}
Dies ist ungetesteter Code.
return new string( source.Where( c => c >= min && c <= max ).ToArray() );
keine Notwendigkeit für Regex. Verwenden Sie einfach die Codierung ...
sOutput = System.Text.Encoding.ASCII.GetString(System.Text.Encoding.ASCII.GetBytes(sInput));
????nacho??
ich, als ich es versuchte: たまねこnachoなち
in Mono 3.4
Ich fand den folgenden leicht geänderten Bereich nützlich, um Kommentarblöcke aus einer Datenbank zu analysieren. Dies bedeutet, dass Sie nicht mit Tab- und Escape-Zeichen kämpfen müssen, die dazu führen würden, dass ein CSV-Feld verärgert wird.
parsememo = Regex.Replace(parsememo, @"[^\u001F-\u007F]", string.Empty);
Wenn Sie andere Sonderzeichen oder bestimmte Satzzeichen vermeiden möchten, überprüfen Sie die ASCII-Tabelle
Ich bin hierher gekommen, um nach einer Lösung für erweiterte ASCII-Zeichen zu suchen, konnte sie aber nicht finden. Das nächste, was ich gefunden habe, ist die Lösung von bzlm . Aber das funktioniert nur für ASCII-Code bis 127 (natürlich können Sie den Codierungstyp in seinem Code ersetzen, aber ich denke, es war ein bisschen komplex zu verstehen. Daher diese Version zu teilen). Hier ist eine Lösung , die für arbeitet erweiterten ASCII - Codes , dh bis zu 255 , die das ist ISO 8859-1
Es werden Nicht-ASCII-Zeichen gefunden und entfernt (größer als 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:
Hier ist eine funktionierende Geige für den Code
Ersetzen Sie die Codierung gemäß den Anforderungen, der Rest sollte gleich bleiben.
Dies ist in Bezug auf die Leistung nicht optimal, aber ein ziemlich direkter Linq-Ansatz:
string strippedString = new string(
yourString.Where(c => c <= sbyte.MaxValue).ToArray()
);
Der Nachteil ist, dass alle "überlebenden" Zeichen zuerst in ein Array vom Typ eingefügt werden, char[]
das dann weggeworfen wird, nachdem der string
Konstruktor es nicht mehr verwendet.
Ich habe diesen regulären Ausdruck verwendet:
string s = "søme string";
Regex regex = new Regex(@"[^a-zA-Z0-9\s]", (RegexOptions)0);
return regex.Replace(s, "");
Ich benutze diesen regulären Ausdruck, um schlechte Zeichen in einem Dateinamen herauszufiltern.
Regex.Replace(directory, "[^a-zA-Z0-9\\:_\- ]", "")
Das sollten alle Zeichen sein, die für Dateinamen zulässig sind.