2016-08-03 73 views
-1

我正在通过一个固定的(平面文件)。我需要帮助来删除非ASCII字符,并在非ASCII字符使用Perl的字段中添加空格,所有删除双“quote”?我还需要删除任何不可见的字符并保留数据: 我需要使用正则表达式来执行此操作;删除非ASCII字符并在非ASCII字符使用Perl的字段中追加空格全部删除双“quote”?

请看下面的例子:

FOìO BAR  PO BOX 1234   
LASDìBA"  PO BOX 1234 
VìD"Sxxx  PO BOX 1234 

1: $str =~ s/"/ /g; removes the " and replaces it with a space (good) 

2: $str =~ s/[^!-~\s]/ /g; 

请帮助:J-

+0

你确定你的意思是删除所有非ASCII字符,而不是删除所有标点和空格?因为'my $ str =“FOÃOOBAR”; print $ str =〜s/[[:ascii:]] // gr;'outputs'“ì”'。这可能不是你想要的。 –

+0

我需要除引号(“双引号”)以外的标点符号。当我尝试使用PL/SQL在数据中加载数据时,双引号引起PL/SQL中的问题(“ORA-00911:无效字符”):非ascii只是一个麻烦,需要数据看起来很干净。 – Mary

回答

0

你可以试试这个代码:

while(<DATA>) 
{ 
    $_=~s/([^[:ascii:]]|")/ /g; 
    print $_; 
} 


__DATA__ 
FOìO BAR  PO BOX 1234 
LASDìBA"  PO BOX 1234 
VìD"Sxxx  PO BOX 1234 

输出:

FO O BAR  PO BOX 1234 
LASD BA  PO BOX 1234 
V D Sxxx  PO BOX 1234 
+0

这也有效;谢谢。我用2解决了它:$ str =〜s/[^! - 〜\ s]// g; – Mary

0

我相信这将替换所有特殊和不可见的字符用空格。

$str =~ s/(.)/(ord($1) > 127) ? " " : $1/egs; 
+0

我的2:$ str =〜s/[^! - 〜\ s]// g;努力摆脱非ascii。我的问题是也删除字符串上的双引号:例如LASD'BA“,变成:LASD BA”,但我需要它是LASD BA – Mary

+0

2:$ str =〜s/[^! - 〜\ S] | “//g;工作和输出是我所需要的。LASD'BA”= LASD BA; – Mary