我一直致力于为第三方公司创建产品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
表达式。或者,也许只有一个正则表达式涵盖了所有内容?
答案 0 :(得分:2)
使用白名单而非黑名单,因为您可以更容易地知道哪些字母是可接受的,而不是哪些字母可能是不可接受的。白名单就是这样。这是一个可接受的字符列表。创建您的白名单,并删除该列表中没有的所有内容。在您的情况下,潜在的白名单可以包括所有ASCII字符。
The following is a white list that captures所有字母数字和标点字符。
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
答案 1 :(得分:0)
以下是一些增强的代码:
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 \ v]。)。
此外,除非您计划删除某个范围的字符或类(例如\p{S}
简写类中的所有字符),否则不需要使用第二个正则表达式,因此,我只链接了几个string.Replace
方法,直接修剪和编码的字符串。
输出:
Buy Kitchen Aid Artisan Stand Mixer 4.8L
答案 2 :(得分:0)
你不需要正则表达式,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