जवाबों:
string s = "søme string";
s = Regex.Replace(s, @"[^\u0000-\u007F]+", string.Empty);
यहाँ एक शुद्ध .NET समाधान है जो नियमित अभिव्यक्ति का उपयोग नहीं करता है:
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)
)
);
यह बोझिल लग सकता है, लेकिन यह सहज होना चाहिए। यह एक स्ट्रिंग बदलने के लिए .NET ASCII एन्कोडिंग का उपयोग करता है। UTF8 का उपयोग रूपांतरण के दौरान किया जाता है क्योंकि यह किसी भी मूल वर्ण का प्रतिनिधित्व कर सकता है। यह किसी भी गैर- ASCII वर्ण को रिक्त स्ट्रिंग में परिवर्तित करने के लिए एक एनकोडररप्लेमेंटफ़ॉलबैक का उपयोग करता है।
यदि आप पट्टी नहीं करना चाहते हैं, लेकिन वास्तव में लैटिन उच्चारण को गैर-उच्चारण पात्रों में परिवर्तित करते हैं, तो इस प्रश्न पर एक नज़र डालें: मैं 8 बिट वर्णों को 7 बिट वर्णों में कैसे अनुवाद करूं? (यानी (से यू)
फिल्क्रूज़ के रेगुलर एक्सप्रेशन सॉल्यूशन से प्रेरित होकर , मैंने एक शुद्ध LINQ सॉल्यूशन बनाया है
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();
}
यह अनकहा कोड है।
return new string( source.Where( c => c >= min && c <= max ).ToArray() );
रेगेक्स की कोई आवश्यकता नहीं है। बस एन्कोडिंग का उपयोग करें ...
sOutput = System.Text.Encoding.ASCII.GetString(System.Text.Encoding.ASCII.GetBytes(sInput));
????nacho??
तब मिला जब मैंने कोशिश की: たまねこnachoなち
मोनो 3.4 में
मैंने पाया कि डेटाबेस से बाहर टिप्पणी ब्लॉक को पार्स करने के लिए निम्न थोड़ा परिवर्तित रेंज उपयोगी है, इसका मतलब है कि आपको टैब से बचने और पात्रों से बचने की ज़रूरत नहीं होगी जिससे सीएसवी क्षेत्र परेशान हो जाएगा।
parsememo = Regex.Replace(parsememo, @"[^\u001F-\u007F]", string.Empty);
यदि आप अन्य विशेष वर्णों से बचना चाहते हैं या विशेष विराम चिह्न की जाँच करते हैं
मैं यहां आस्की पात्रों के लिए एक समाधान की तलाश में आया था, लेकिन इसे पा नहीं सका। मैंने जो सबसे नज़दीकी पाया वह है bzlm का समाधान । लेकिन वह केवल 127 तक ASCII कोड के लिए काम करता है (जाहिर है कि आप एन्कोडिंग प्रकार को उसके कोड में बदल सकते हैं, लेकिन मुझे लगता है कि यह समझना थोड़ा जटिल था। इसलिए, इस संस्करण को साझा करना)। यहां एक समाधान है जो विस्तारित ASCII कोड के लिए काम करता है अर्थात 255 तक जो कि आईएसओ 8859-1 है
यह गैर-असिसी पात्रों को पाता है और स्ट्रिप करता है (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:
यहाँ कोड के लिए एक काम कर रहे बेला है
एन्कोडिंग को आवश्यकता के अनुसार बदलें, बाकी समान होना चाहिए।
यह इष्टतम प्रदर्शन-वार नहीं है, लेकिन एक बहुत ही सीधा-आगे लिनेक दृष्टिकोण है:
string strippedString = new string(
yourString.Where(c => c <= sbyte.MaxValue).ToArray()
);
नकारात्मक पक्ष यह है कि सभी "जीवित" वर्णों को पहले एक प्रकार की सरणी में डाल दिया जाता है, char[]
जिसे तब फेंक दिया जाता है जब string
निर्माणकर्ता अब इसका उपयोग नहीं करता है।
मैंने इस रेगेक्स एक्सप्रेशन का उपयोग किया है:
string s = "søme string";
Regex regex = new Regex(@"[^a-zA-Z0-9\s]", (RegexOptions)0);
return regex.Replace(s, "");
मैं एक फ़ाइलनाम में बुरे पात्रों को फ़िल्टर करने के लिए इस नियमित अभिव्यक्ति का उपयोग करता हूं।
Regex.Replace(directory, "[^a-zA-Z0-9\\:_\- ]", "")
फ़ाइल नाम के लिए अनुमत सभी वर्ण होने चाहिए।