你好,我試圖消除數字和特殊字符,除了從以下字符串中的空格:從字符串中刪除除空格之外的特殊字符?
$string = 'ClA�\u0083A�A�ment Lecigne';
使用下面的代碼:
$string =~ tr/a-zA-Z//dc;
我們得到如下:
"ClAuAAmentLecigne"
我真正需要的是:
"ClAuAAment Lecigne"
有人可以幫助我改進代碼嗎?謝謝,
你好,我試圖消除數字和特殊字符,除了從以下字符串中的空格:從字符串中刪除除空格之外的特殊字符?
$string = 'ClA�\u0083A�A�ment Lecigne';
使用下面的代碼:
$string =~ tr/a-zA-Z//dc;
我們得到如下:
"ClAuAAmentLecigne"
我真正需要的是:
"ClAuAAment Lecigne"
有人可以幫助我改進代碼嗎?謝謝,
有相當多的空白字符。
$ 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
謝謝,這也有幫助! –
就在tr/a-zA-Z //dc;
$string = 'ClA�\u0083A�A�ment Lecigne';
$string =~ tr/a-zA-Z //dc;
print $string . "\n";
輸出加上一個空格:
ClAuAAment Lecigne
輸出中的u是在哪裏:)當OP查找'ClAuAAment Lecigne' – Braj
@braj,對於我來說,我認爲perl正在將'\ u0083'解釋爲另一個字符。運行op代碼時,我也沒有得到'u'。我想,如果他看到了'u',它仍然適用於他。也許不同版本的Perl? – chilemagic
@Matt它幫助了我!謝謝, –
「\ u0083」代表什麼?它是一個單一的字符。爲什麼'u'被添加到期望的輸出中? – Braj
除了'a-zA-Z'什麼都沒有,你正在取代所有的東西,你爲什麼期望看到一個空間?此外,你應該看到'ClAAAmentLecigne'不是'ClAuAAmentLecigne'。 –
@Braj這與字符ASCII和UTF8轉換有關。我不知道這是什麼意思。不過,我可以說這個\ u0083可能代表一個口音。 –