gpt4 book ai didi

c# - 替换为正则表达式

转载 作者:太空狗 更新时间:2023-10-29 19:44:13 28 4
gpt4 key购买 nike

在我们的应用程序中,用户将数据从 MS word 输入到 asp.net textarea 控件,最后将数据保存在 SQL Server 中。出于某种原因,从 SQL Server Management Studio 查看时,几乎没有看起来像小方 block 的垃圾字符。

这会导致生成 Crystal Reports 时出错。

我需要一个正则表达式来去除所有这些字符和项目符号。唯一有效的输入是

A-Z, a-z , 0-9, ~ ! @ # % $ ^ & *  ( ) _ + | ` - = \ {}:">? < [ ] ; ' , . /

此外,制表符空格应替换为单个空格。允许输入键或换行。

我目前正在使用

Regex.Replace(data, @"[^\u0000-\u007F]", " ");

但删除项目符号或制表符空格将不起作用。

任何正则表达式专家都可以帮我解决这个问题吗?提前致谢。

最佳答案

您可以使用两个正则表达式。第一个,带有模式 "\t|<bullet>" (其中 <bullet> 代表项目符号的表示)首先使用,用空格 ( " " ) 替换制表符和项目符号。第二个,其模式是一个包含有效字符列表的否定字符集,用于第二个,用空字符串( "" )替换无效字符,即摆脱它们。由于您需要保留 CR 和 LF 字符(和空格),因此必须将这些添加到有效字符集中:

using System;
using System.Text.RegularExpressions;

static class Program
{
public static void Main()
{
string pattern1 = @"\t";
Regex regex1 = new Regex(pattern1, RegexOptions.Compiled);
string pattern2 = @"[^A-Za-z0-9~!#$^&*()_+|`\-=\\{}:"">?<\[\];',./ \r\n]";
Regex regex2 = new Regex(pattern2, RegexOptions.Compiled);

string input = "ABZabz09~!#$^&*()_+|`-=\\{}:\">?<[];',./ \r\nárvíztűrő\ttükörfúrógép";
string temp = regex1.Replace(input, " ");
string output = regex2.Replace(temp, "");
Console.WriteLine(input);
Console.WriteLine(output);
Console.ReadKey(true);
}
}

输出:

ABZabz09~!#$^&*()_+|`-=\{}:">?<[];',./
árvíztűrő tükörfúrógép
ABZabz09~!#$^&*()_+|`-=\{}:">?<[];',./
rvztr tkrfrgp

请注意 árvíztűrő 之后的制表符替换为一个空格。

关于子弹:

我在 Word 中制作了项目符号列表并将其复制到网页的文本区域中。然后我保存了 HTML 并发现项目符号被保存为 UTF-8 编码字符 E280A2 .这就是我在上面所说的“子弹的表示”。您应该弄清楚可能的项目符号字符的二进制表示并将它们添加到第一个模式:或者将它们添加到 TAB 字符,或者将它们全部放入一个字符集中:

using System;
using System.Text;
using System.Text.RegularExpressions;

static class Program
{
public static void Main()
{
byte[] bulletBytes = new byte[] { 0xE2, 0x80, 0xA2 };
string bullet= Encoding.UTF8.GetString(bulletBytes);

string pattern1 = @"[\t" + bullet + "]";
Regex regex1 = new Regex(pattern1, RegexOptions.Compiled);
string pattern2 = @"[^A-Za-z0-9~!#$^&*()_+|`\-=\\{}:"">?<\[\];',./ \r\n]";
Regex regex2 = new Regex(pattern2, RegexOptions.Compiled);

string input =
bullet + "ABZabz09~!#$^&*()_+|`-=\\{}:\">?<[];',./ \r\n" +
bullet + "árvíztűrő\ttükörfúrógép";
string temp = regex1.Replace(input, " ");
string output = regex2.Replace(temp, "");
Console.OutputEncoding = Encoding.UTF8;
Console.WriteLine(input);
Console.WriteLine(output);
Console.ReadKey(true);
}
}

输出(您应该将控制台字体更改为 Lucida Console 以查看项目符号):

•ABZabz09~!#$^&*()_+|`-=\{}:">?<[];',./
•árvíztűrő tükörfúrógép
ABZabz09~!#$^&*()_+|`-=\{}:">?<[];',./
rvztr tkrfrgp

现在除了TAB,每行开头的项目符号也换成了空格。

关于c# - 替换为正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14853889/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com