簡體   English   中英

刪除字符串中的特殊字符和無效字符

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM