您好我试图删除数字和特殊字符,但以下字符串中的空格除外:
$string = 'ClA�\u0083A�A�ment Lecigne';
使用以下代码:
$string =~ tr/a-zA-Z//dc;
我们获得以下内容:
"ClAuAAmentLecigne"
我真正需要的是:
"ClAuAAment Lecigne"
有人可以帮助我改进代码吗?谢谢,
答案 0 :(得分:4)
有很多空白字符。
$ unichars '\s'
---- U+0009 CHARACTER TABULATION
---- U+000A LINE FEED
---- U+000B LINE TABULATION
---- U+000C FORM FEED
---- U+000D CARRIAGE RETURN
---- U+0020 SPACE
---- U+0085 NEXT LINE
---- U+00A0 NO-BREAK SPACE
---- U+1680 OGHAM SPACE MARK
---- U+2000 EN QUAD
---- U+2001 EM QUAD
---- U+2002 EN SPACE
---- U+2003 EM SPACE
---- U+2004 THREE-PER-EM SPACE
---- U+2005 FOUR-PER-EM SPACE
---- U+2006 SIX-PER-EM SPACE
---- U+2007 FIGURE SPACE
---- U+2008 PUNCTUATION SPACE
---- U+2009 THIN SPACE
---- U+200A HAIR SPACE
---- U+2028 LINE SEPARATOR
---- U+2029 PARAGRAPH SEPARATOR
---- U+202F NARROW NO-BREAK SPACE
---- U+205F MEDIUM MATHEMATICAL SPACE
---- U+3000 IDEOGRAPHIC SPACE
如果您想继续使用tr///
,则必须全部列出
$string =~ tr/a-zA-Z\x09\x0A\x0B...\x{3000}//dc;
切换到s///
更简单。
$string =~ s/[^\pL\s]//g; # Remove all but letters and whitespace
答案 1 :(得分:2)
只需在tr/a-zA-Z //dc;
$string = 'ClA�\u0083A�A�ment Lecigne';
$string =~ tr/a-zA-Z //dc;
print $string . "\n";
输出:
ClAuAAment Lecigne