C#把字符串里除汉字、英文字母、数字、空格之外的字符都换成空格。最好用正则表达式。

请附代码用函数的形式回答,我给出2个测试用例。
C#把字(符串里除汉字)换成 C 把字 符串里除汉字
:18轮,氙灯,导航,14向座椅,BOSE, 换成 18轮 氙灯 导航 14向座椅 BOSE

private void button2_Click(object sender, EventArgs e)
        {
           MessageBox.Show(
                Replace(
                    new Regex(@"([^\u4e00-\u9fa5a-zA-z0-9\s].*?)"), 
                    ":18轮,氙灯,导航,14向座椅,BOSE, 换成  18轮 氙灯 导航 14向座椅 BOSE"));
        }

        /// <summary>
        /// The replace.
        /// </summary>
        /// <param name="regex">
        /// The regex.
        /// </param>
        /// <param name="input">
        /// The input.
        /// </param>
        /// <returns>
        /// The <see cref="string"/>.
        /// </returns>
        public static string Replace(Regex regex, string input)
        {
            string inputReplaced = null;

                inputReplaced = regex.Replace(input, " ");

            return inputReplaced;
        }

这是用正则做的,效果请看图片



追问

我想问你弹出界面里面为什么“换成”两边是一样的?没按照我的测试用例来。

追答

需要把源码的字串改下 才会出第二个结果,

源码里只是写了一个的字串的

追问

右斜杠怎么办呢?

追答

如果想不替换右 斜杠 请把代码中的正则修改成

([^\u4e00-\u9fa5a-zA-z0-9\s/].*?)

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-08-15
把字符串里的每个元素(字符)for一下,然后用Encoding.Default处理成字节码,长度为1的是Ascii,用<和>确定范围,是字母数字空格可以不管,其它可以换成空格(详请参照Ascii表),长度为、2的是汉字,不用管。

public static string Proc(string str)
{
for(int i=0;i<str.Length;i++)
. {
. byte[] bts=Enco
ding.Default.GetBytes(str[i]);
.
. if(bts.Length==1){
. if(!((bts[0]>=48&&bts[0]<=57)||(bts[0]>=65&&bts[0]<=90)||(bts[0]>=97&&bts[0]<=122)))
. {
. str[i]=' ';
. }
. }

. }
. return str;
}
第2个回答  2013-08-15

没看明白你说的是什么意思,给你个参考吧:

private string Replace(string input)
{
           string result= Regex.Replace(input, @"[u4e00-u9fa5]", "C", RegexOptions.Compiled | RegexOptions.IgnoreCase);
           result = Regex.Replace(result, @"[,]", " ", RegexOptions.Compiled | RegexOptions.IgnoreCase);
           return result;
}

追问

哪里没看明白?

第3个回答  2013-08-15
[\S]*

试试这个看
第4个回答  2013-08-15
不会用正则,只会逐字节判断,嘿嘿追问

那也可以,不过你能穷尽特殊符号?

追答

奇怪的问题,为什么座椅、轮椅不能被识别

追问

你的观察能力是否有问题?

追答

追问

能不能发附件给我测试一下?

追答

程序还有小问题,你先试试吧

追问

能不能换成txt扩展名?我没法下载。

追答追问

这个更没法看,txt扩展名懂了么?我的网络的百度下载被屏蔽了。

追答追问

还是谢谢你了。

...英文字母、数字、空格之外的字符都换成空格。最好用正则表达式。_百 ...
string input) { string inputReplaced = null; inputReplaced = regex.Replace(input, " "); return inputReplaced; }这是用正则做的,效果请看图片

C#正则 去除中文字符间的多个空格,将英文字符间的多个空格合并为一个...
string oriStr = "正 则表 达式去空 格 regex replace space";string newStr = Regex.Replace(Regex.Replace(oriStr, "(?<=[\一-\龥])\\\\s+(?=[\一-\龥])", string.Empty), "(?<=[a-z])\\\\s+(?=[a-z])", " ");最后结果为 正则表达式去空格 ...

C# 分别提取字符串的的汉字 数值 英文
数字\\d+ 英文[a-zA-Z]+

在C#中怎么把字符串中的字母和数字分开
把字符串拆成char 数组 然后循环判断是字符还是数字 if(A<XX<Z || a<XX<z)字母 if(0<xx<9)复杂点的话 用正则表达式 也可以

C# 中如何清除字符串中的空白或空行?
str="要清楚的字符串";str=str.Replace(" ","");\/\/先清除空格。str=str.Replace("\\r\\n\\r\\n","\\r\\n");\/\/再清除空行,原理:空行是连续的 \/\/回车。但碰到连续两个空行只能清除一个,所以需要再来一次。str=str.Replace("\\r\\n\\r\\n","\\r\\n");如果要写简单一点就是:str=str....

c# 正则表达式提取中文中间的数字字母字符串
代码如下:class Program{static void Main(string[] args){string str = "ABCD 正则表达式 Y2018 M1D26 学习 666";Match match = Regex.Match(str, @"[\⺀-\￿]+\\s*(.+?)\\s*[\⺀-\￿]+");Console.WriteLine(match.Groups[1].Value);Console.ReadKey();}}运行结果:

在C#中怎样替换字符串中的某个字符
Unicode 字符。Replace(string oldValue, string newValue)将此实例中的指定 String 的所有匹配项替换为其他指定的 String。第一个参数是被替换的字符串,第二个参数是替换的参数 例如var politicallyCorrect = test.Replace("men", "people");将所有的men替换成了people。

用C#怎么编写---一篇英文文章中的所有的英文单词都调取出来
每个单词后都有一个空格,所以就可以将文章以空格为分隔点分开,然后存到数组中,最后在打印出来就可以了 string a = "sadh lkasjd alksdj你的文章";string[] Arr = a.Split[" "];\\\\将文章以空格为分隔点分开,然后存到数组中 for (int i = 0; i <= Arr.Length - 1; i++){ Cons...

C#字符串中正则表达式匹配指定字符串段删除其它字符串
string str = "1P+N C6 30mA (710063300000002)\\r\\n 1P+N C6 30mA (710063300000002)\\r\\n 1P+N C10 30mA (710063300000003)\\r\\n 1P+N C16 30mA (710063300000004)\\r\\n 1P+N C20 30mA (710063300000005)\\r\\n 1P+N C25 30mA (710063300000006)\\r\\n 1P+N C32 30mA (710063300000007)\\r\\...

C# 如何高效替换一个字符串中的全部某字符?
String.Replace也是全部替换。如果您需要替换复杂的内容,可以使用正则表达式。正则对复杂字串的替换效率高。C#中的正则表达式默认贪婪算法,总试图匹配更多的字符,所以若是简单的替换一个或几个字符,还是不要用比较好。Regex.Replace()需要引用System.Text.RegularExpression命名空间。

相似回答