从字符串中删除非数字和非字母字符?

时间:2009-02-09 14:50:04

标签: regex string replace

从字符串中删除所有特殊字符的最佳方法是什么 - 如下所示:

@#$%^&安培; *(){} |:“><,/;'[] \ = -

?。

删除这些字符的项目会相当短,那么在每个项目上使用REGEX或仅使用字符串操作会更好吗?

THX

环境== C#/。NET

9 个答案:

答案 0 :(得分:6)

拥有白名单通常比黑名单更好。

正则表达式有一个方便的\w,实际上意味着字母数字加上下划线(某些变体还会在列表中添加重音字符(á,é,ô等),其他变体不会)。

您可以使用\W来表示不是字母数字的所有内容。

所以用空字符串替换\W会删除所有“特殊”字符。


或者,如果您确实需要一组不同的字母数字字符,则可以使用否定的字符类:[^abc]将匹配不是ab或{{ 1}},c将匹配范围[^a-z]

范围内的所有内容

相当于a,b,c,d...x,y,z\w,因此[A-Za-z0-9_]\W

答案 1 :(得分:3)

在php中:

$tests = array(
     'hello, world!'
    ,'this is a test'
    ,'and so is this'
    ,'another test with /slashes/ & (parenthesis)'
    ,'l3375p34k stinks'
);

function strip_non_alphanumerics( $subject )
{
    return preg_replace( '/[^a-z0-9]/i', '', $subject );
}

foreach( $tests as $test )
{
    printf( "%s\n", strip_non_alphanumerics( $test ) );
}

输出将是:

helloworld
thisisatest
andsoisthis
anothertestwithslashesparenthesis
l3375p34kstinks

答案 2 :(得分:2)

我更喜欢正则表达式,因为语法更易于阅读和维护:

# in Python
import re
re.sub("[abcdef]", "", text)

其中abcdef是要删除的正确转义的字符。

或者,如果您只想要字母数字字符(加上下划线),您可以使用:

re.sub("\W", "", text)

其中\W代表非单词字符,即[^a-zA-Z_0-9]

答案 3 :(得分:1)

如果您只想使用字母数字字符,可以使用倒置字符类来表达:

[^A-Za-z0-9]+

这意味着:每个不是字母数字的字符。

答案 4 :(得分:1)

这是一个简单的正则表达式

[^\w]

这应该捕获所有非单词字符,这将允许az AZ 0-9空格,_既不是空格也不是_在你的列表中,所以如果你想要捕捉这些也有效,那么我会做这样的事情:

/[a-z0-90/i

这是a-z和0-9的PHP格式,i使其不区分大小写。

答案 5 :(得分:0)

使用“tr”命令?

你没有说你在做什么环境......贝壳? C程序? Java的?每个都有不同的最佳解决方案。

答案 6 :(得分:0)

你用什么语言写正则表达式?

例如,在Perl中,您可以进行翻译,将列表中的任何字符转换为空白:

e.g。这会将'a','b','c'或'd'翻译成''

$sentence =~ tr/abcd//;

答案 7 :(得分:0)

您可以通过获取键入字符的askey值来在前端验证它们。

答案 8 :(得分:0)

PHP中的理想方法是......

$text = "ABCDEF...Á123";
$text = preg_replace( '/[^\p{L}]/i', '', $text);
print($text); # Output: ABCDEFÁ

或者,在Perl ......

my $text = "ABCDEF...Á123";
$text =~ s/[^\p{L}]//gi;
print($text); # Output: ABCDEFÁ

如果您只是在[^ a-zA-Z]上匹配,您将会错过所有重音字符,这些(大多数情况下),我想您会想要保留。