[英]Removal of special characters from string using perl script
我有一個如下的字符串
stringinput = Sweééééôden@
我想得到 output 之類的
stringoutput = Sweden
必須刪除 spl 字符ééééô
和@
。
我正在使用
$stringoutput = `echo $stringinput | sed 's/[^a-z A-Z 0-9]//g'`;
我得到了像Sweééééôden
這樣的結果,但ééééô
沒有被刪除。
你能建議我補充什么嗎
無需從 Perl 調用 sed,perl 可以自己進行替換。 它也更快,因為您無需啟動新流程。
#!/usr/bin/perl
use warnings;
use strict;
use utf8;
my $string = 'Sweééééôden@';
$string =~ s/[^A-Za-z0-9]//g;
print $string;
您需要在sed
命令之前使用LC_ALL=C
以使[A-Za-z]
字符 class 根據 ASCII 表創建范圍:
stringoutput=$(echo $stringinput | LC_ALL=C sed 's/[^A-Za-z0-9]//g')
查看在線演示:
stringinput='Sweééééôden@';
stringoutput=$(echo $stringinput | LC_ALL=C sed 's/[^A-Za-z0-9]//g');
echo "$stringoutput";
# => Sweden
請參閱POSIX 正則表達式參考:
在默認的 C 語言環境中,排序順序是本機字符順序; 例如,“[ad]”等價於“[abcd]”。 在其他語言環境中,未指定排序順序,並且“[ad]”可能等同於“[abcd]”或“[aBbCcDd]”,或者它可能無法匹配任何字符或它所匹配的字符集匹配甚至可能是不穩定的。 要獲得括號表達式的傳統解釋,您可以通過將 LC_ALL 環境變量設置為值“C”來使用“C”語言環境。
在 Perl 中,您可以簡單地使用
my $stringinput = 'Sweééééôden@';
my $stringoutput = $stringinput =~ s/[^A-Za-z0-9]+//gr;
print $stringoutput;
請參閱此在線演示。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.