[英]Removing Special and Invalid characters in a String
我一直在為第三方公司創建產品Feed。 我正在使用的數據有各種各樣的無效,特殊字符,雙倍間距等。他們還要求數據是HTML編碼的,其中使用了特殊字符。
一些可傳遞的數據示例=“購買廚房”
Aid Artisan™立式攪拌機4.8L“
try
{
var removeDoubleSpace = Regex.Replace(stringInput, @"\s+", " ");
var encodedString = HttpUtility.HtmlEncode(removeDoubleSpace).Trim();
var encodedAndLineBreaksRemoved = encodedString.Replace(Environment.NewLine, "");
var finalStringOutput = Regex.Replace(encodedAndLineBreaksRemoved, @"(™)|(’)|(”)|(–)", "");
return finalStringOutput;
}
catch (Exception)
{
return stringInput;
}
我試圖想出一個可以調用的方法,以更清晰的方式完成上述所有操作,而不是幾個Regex
表達式。 或者,也許只有一個正則表達式涵蓋了一切?
使用白名單而不是黑名單,因為您可以更容易地知道哪些字母是可接受的,而不是哪些字母可能是不可接受的。 白名單就是這樣。 這是一個可接受的字符列表。 創建您的白名單,並刪除該列表中沒有的所有內容。 在您的情況下,潛在的白名單可以包括所有ASCII字符。
using System;
using System.Text;
using System.Text.RegularExpressions;
public class Program
{
private static string input = @"Buy Kitchen
Aid Artisan™ Stand Mixer 4.8L ";
public static void Main()
{
var match = Regex
.Match(input, @"[a-zA-Z0-9\p{P}]+");
StringBuilder builder = new StringBuilder();
while(match.Success)
{
// add a space between matches
builder.Append(match + " ");
match = match.NextMatch();
}
Console.WriteLine(builder.ToString());
}
}
產量
Buy Kitchen Aid Artisan Stand Mixer 4.8L
這是一些增強的代碼:
var removeDoubleSpace = Regex.Replace(stringInput, @"\s+", " ");
var encodedString = System.Web.HttpUtility.HtmlEncode(removeDoubleSpace).Trim().Replace("™", string.Empty).Replace("’", string.Empty).Replace("”", string.Empty).Replace("–", string.Empty);
您不需要使用var encodedAndLineBreaksRemoved = encodedString.Replace(Environment.NewLine, "");
因為已使用\\s+
正則表達式刪除換行符號( \\s
匹配任何空白字符,包括空格,制表符,換頁符等等。相當於[\\ f \\ n \\ r \\ t \\ t]。 )。
此外, 除非您計划刪除某個范圍的字符或類(例如\\p{S}
簡寫類中的所有字符), 否則不需要使用第二個正則表達式,因此,我只是鏈接了幾個string.Replace
方法,右邊修剪和編碼的字符串。
輸出:
Buy Kitchen Aid Artisan Stand Mixer 4.8L
你不需要正則表達式,linq也會這樣做:
var str = "Buy Kitchen Aid Artisan™ Stand Mixer 4.8L";
var newStr = new string(str.Where(c => !Char.IsSymbol(c)).ToArray());
Console.WriteLine(newStr); // Buy Kitchen Aid Artisan Stand Mixer 4.8L
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.