求一正则,去掉所有符号

OROCHIORI614 2011-08-20 07:33:05

string str3 = Regex.Replace("1121212abc ,,,,,中文。eee.abc, ", @"[^a-zA-Z0-9\u4e00-\u9fa5\s]", "");

此正则有个局限,就是碰到外文也被当成符号了..求一个包含所有符号的正则...
...全文
577 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
OROCHIORI614 2011-08-21
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 icedmilk 的回复:]
这个应该行吧
string str3 = Regex.Replace("1121212abc ,,,,,中文_。eee.abc, ", @"[\W_]", "");


\w等于[所有的字符和下划线]
\W是\w的补集,就是左右的符号,不包括下划线

[\W_]表示所有的符号以及下划线,中括号不能丢,你只要用这个就行了,不要用什么的a-z了

[^a-zA-Z0-9\s\W_]这……
[/Quote]
太完美了 谢谢!!
Icedmilk 2011-08-21
  • 打赏
  • 举报
回复
这个应该行吧
string str3 = Regex.Replace("1121212abc ,,,,,中文_。eee.abc, ", @"[\W_]", "");


\w等于[所有的字符和下划线]
\W是\w的补集,就是左右的符号,不包括下划线

[\W_]表示所有的符号以及下划线,中括号不能丢,你只要用这个就行了,不要用什么的a-z了

[^a-zA-Z0-9\s\W_]这个正则的意思是“除了a-zA-Z0-9,符号和下划线,空白,以为的字符”当然会把中文和日文替换掉
OROCHIORI614 2011-08-21
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 icedmilk 的回复:]
有那么复杂吗?
\w是跨语言的字符,不过他是包括下划线的
看你怎么定义了,如果你不希望保留下划线就用
[\W_]
如果希望保留就用
\W


string str3 = Regex.Replace("1121212abc ,,,,,中文_。eee.abc, ", @"[\W_]", "");
[/Quote]
谢谢!!
有个问题

string str3 = Regex.Replace("1121212a_bc ,,,,にほん,中文。eee.abc, ", @"[^a-zA-Z0-9\s\w]", "");

这句话和你说的情况是一样的,只是多了下划线。但是换成下面这句,就不对了

string str3 = Regex.Replace("1121212a_bc ,,,,にほん,中文。eee.abc, ", @"[^a-zA-Z0-9\s\W_]", "");

str3的结果是 "1121212a_bc ,,,,,。eee.abc, "
中文和日文都丢了,若将\W_换成\w_ 则结果同样存在下划线
求解
Icedmilk 2011-08-21
  • 打赏
  • 举报
回复
你提取Email慢很多是因为你使用RegexOptions.IgnoreCase.
另外使用RegexOptions.Compiled会有一定作用

static Regex regexLink = new Regex(@"(href|HREF)[ ]*=[ ]*[""'][^""'#>]+[""']", RegexOptions.Compiled);
static Regex regexEmail = new Regex(@"[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,6}", RegexOptions.Compiled);
public static string[] ExtractLinks(string html) {
Collection<string> urls = new Collection<string>();
try {
MatchCollection matches = regexLink.Matches(html);
string str = null;
foreach (Match match in matches) {
str = match.Value;
urls.Add(str);
}
} catch (Exception ex) {
Console.WriteLine(ex.Message);
}

return urls.ToArray();
}
public static string[] ExtractEmails(string html) {
Collection<string> emails = new Collection<string>();
try {
string str = null;
MatchCollection matches = regexEmail.Matches(html);
foreach (Match match in matches) {
str = match.Value;
emails.Add(str);
Thread.Sleep(1);
}
} catch (Exception ex) {
Console.WriteLine(ex.Message);
}
return emails.ToArray();
}
Icedmilk 2011-08-21
  • 打赏
  • 举报
回复
[]括起来的叫字符类
字符类中

字符类中. * ?都不再是特殊字符了
但是[ - ]这三个字符却变成了特殊字符,需要\来转义

[Quote=引用 16 楼 orochiori614 的回复:]

引用 10 楼 q107770540 的回复:
引用 8 楼 orochiori614 的回复:

引用 4 楼 q107770540 的回复:
首先你要讲清楚 “符号” 有哪些
或我想保留的字符在什么范围内

就我能想到的 键盘上能直接打出来的吧 比如!@#¥%……&amp;amp;*()《》,。 包括全角和半角的
至于那些另类的,比如★●◆等 可以不考虑


s……
[/Quote]
Icedmilk 2011-08-21
  • 打赏
  • 举报
回复
有那么复杂吗?
\w是跨语言的字符,不过他是包括下划线的
看你怎么定义了,如果你不希望保留下划线就用
[\W_]
如果希望保留就用
\W


string str3 = Regex.Replace("1121212abc ,,,,,中文_。eee.abc, ", @"[\W_]", "");
OROCHIORI614 2011-08-21
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 q107770540 的回复:]
引用 8 楼 orochiori614 的回复:

引用 4 楼 q107770540 的回复:
首先你要讲清楚 “符号” 有哪些
或我想保留的字符在什么范围内

就我能想到的 键盘上能直接打出来的吧 比如!@#¥%……&amp;*()《》,。 包括全角和半角的
至于那些另类的,比如★●◆等 可以不考虑


string str3 = Regex.Replace("11……
[/Quote]
你这个方法不错,但以前没用过正则、碰到一些问题,貌似是碰到了正则中的一些关键字导致的吧,举个例子

string str3 = Regex.Replace("11~21[212a-b^c ,,,,,中文。eee.abc, ", "[~,^.,[。-!]", "");

这时 str3的结果是"11~21]212a-b^c ,,,,,中文。eee.abc, "
替换失败了,肯定是中间有些地方写得不对了,应该是-> - ] ^ 这几个符号不应该直接写吧,应该怎么加到正则中呢 ,同时还有 " 这个" 应该怎么加到正则中合适呢?



OROCHIORI614 2011-08-21
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 huangwenquan123 的回复:]
引用楼主 orochiori614 的回复:
C# code

string str3 = Regex.Replace("1121212abc ,,,,,中文。eee.abc, ", @"[^a-zA-Z0-9\u4e00-\u9fa5\s]", "");


此正则有个局限,就是碰到外文也被当成符号了..求一个包含所有符号的正则...
lz的意思是要把英文字母的也替换掉?只留中文和……
[/Quote]
不是这个意思 我在发帖时那个正则已经基本满足需求了,但是远离是利用排除法,有些情况是不对的
比如字符串包含日文、韩文、德文等等,这时候就会把这些日文、德文、韩文一并认为是符号了,所以是错的
huangwenquan123 2011-08-20
  • 打赏
  • 举报
回复
[Quote=引用楼主 orochiori614 的回复:]
C# code

string str3 = Regex.Replace("1121212abc ,,,,,中文。eee.abc, ", @"[^a-zA-Z0-9\u4e00-\u9fa5\s]", "");


此正则有个局限,就是碰到外文也被当成符号了..求一个包含所有符号的正则...
[/Quote]lz的意思是要把英文字母的也替换掉?只留中文和数字?

string str3 = Regex.Replace("1121212abc ,,,,,中文。eee.abc, ", @"[^0-9\u4e00-\u9fa5\s]", "");

OROCHIORI614 2011-08-20
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 q107770540 的回复:]
引用 8 楼 orochiori614 的回复:

引用 4 楼 q107770540 的回复:
首先你要讲清楚 “符号” 有哪些
或我想保留的字符在什么范围内

就我能想到的 键盘上能直接打出来的吧 比如!@#¥%……&amp;*()《》,。 包括全角和半角的
至于那些另类的,比如★●◆等 可以不考虑


string str3 = Regex.Replace("11……
[/Quote]
把所有键盘上的符号自己全部输入进去?是这个意思么?
OROCHIORI614 2011-08-20
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 dongxinxi 的回复:]
楼猪你给出一个比较明确的替换规则
你上面貌似都是中文符号或全角的
英文的小逗号和句点以及问号那些呢?
参考
[/Quote]
英文必须也包括呀
  • 打赏
  • 举报
回复

楼猪你给出一个比较明确的替换规则
你上面貌似都是中文符号或全角的
英文的小逗号和句点以及问号那些呢?
参考
q107770540 2011-08-20
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 orochiori614 的回复:]

引用 4 楼 q107770540 的回复:
首先你要讲清楚 “符号” 有哪些
或我想保留的字符在什么范围内

就我能想到的 键盘上能直接打出来的吧 比如!@#¥%……&*()《》,。 包括全角和半角的
至于那些另类的,比如★●◆等 可以不考虑
[/Quote]

string str3 = Regex.Replace("1121212abc ,,,,,中文。eee.abc, ", @"[@#¥%……&*()《》,。]", "");
OROCHIORI614 2011-08-20
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 huangwenquan123 的回复:]
引用楼主 orochiori614 的回复:
C# code

string str3 = Regex.Replace("1121212abc ,,,,,中文。eee.abc, ", @"[^a-zA-Z0-9\u4e00-\u9fa5\s]", "");


此正则有个局限,就是碰到外文也被当成符号了..求一个包含所有符号的正则...
外文?什么文?
[/Quote]
问下 \u4e00-\u9fa5 什么意思 是中文的意思么?包括除了英文之外的文么?

随便一种外文呀 我在数据库中貌似见过 u上面有两个点的样子的东西
OROCHIORI614 2011-08-20
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 q107770540 的回复:]
首先你要讲清楚 “符号” 有哪些
或我想保留的字符在什么范围内
[/Quote]
就我能想到的 键盘上能直接打出来的吧 比如!@#¥%……&*()《》,。 包括全角和半角的
至于那些另类的,比如★●◆等 可以不考虑
haojuntu 2011-08-20
  • 打赏
  • 举报
回复
lz应当把问题描述清楚一些,最好给个实现的例子。。
  • 打赏
  • 举报
回复
符号也有中文和英文之分的
huangwenquan123 2011-08-20
  • 打赏
  • 举报
回复
[Quote=引用楼主 orochiori614 的回复:]
C# code

string str3 = Regex.Replace("1121212abc ,,,,,中文。eee.abc, ", @"[^a-zA-Z0-9\u4e00-\u9fa5\s]", "");


此正则有个局限,就是碰到外文也被当成符号了..求一个包含所有符号的正则...
[/Quote]外文?什么文?
q107770540 2011-08-20
  • 打赏
  • 举报
回复
首先你要讲清楚 “符号” 有哪些
或我想保留的字符在什么范围内
rollng 2011-08-20
  • 打赏
  • 举报
回复

//\u3002\uff1b\uff0c\uff1a\u201c\u201d\uff08\uff09\u3001\uff1f\u300a\u300b 中文符号
//\p{P}西文符号
//\f\n\r\t\v\x85\p{Z} 空格等

自我感觉不好,坐等高手
加载更多回复(2)

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧