2017-10-20 104 views
0

我希望捕获.csv文件中的无效字符。目前我只能捕捉到所有不是英文的无效字符,还有无法识别除英文以外的所有无效字符。& 德国无效字符选择字符串(适用于德国语言)

以下代码可以过滤非英文字母的无效字符。

$path = "product.csv" 

$a = Get-Content $path | Select-String -AllMatches -Pattern "[^\x00-\x79]" | Select-Object LineNumber,Line,@{Name='String';Expression={$_.Matches.Value}} 
$b = $a.count 

$a 
Write-Host "Total: $b" 

所有德国人名中包含的字符都计为有效字符。

+0

如果您想检查文件路径中的无效字符,请查看[GetInvalidFileNameChars()](https://stackoverflow.com/questions/23066783/how-to-strip-illegal-characters-before-trying-to -save-filenames) –

+0

对不起,我忘了提到,这个获取内容是读取.csv文件的内容,而不是文件名。 –

+0

这是故意的,你允许字符“[]”而不是“{}”? –

回答

1

最简单的方法是将德文特定字符的十六进制文字添加到匹配组中。您正在查找的字符是:

ß \xdf 
Ü \xdc 
ü \xfc 
Ä \xc4 
ä \xe4 
Ö \xd6 
ö \xf6 

所以,你的新的匹配组将是:

-Pattern "[^\x00-\x79\xdf\xdc\xfc\xc4\xe4\xd6\xf6]" 

编辑:

作为替代由自己的代码匹配字符点你可以还可以使用的实际字符在匹配模式:

-Pattern "[^a-zA-ZäÄöÖüÜß]" 

它更易于阅读,并且不包括您在上面匹配的\x00\x21之间的所有这些非人类可读的控制字符。

+0

您好Manuel Batsching,我在网上搜索有超过7个德语字符[链接](https://www.alt-codes.net/german_alt_codes/)。那么你提供的比赛组是否都是正确的或者还有更多的德语角色需要添加?我可能知道你是如何得到十六进制值的?有没有任何资源可以查看完整列表?我稍后可能需要进一步继续检查另一种语言,例如中文,韩文。谢谢 –

+0

为什么十六进制转义? – Tomalak

+0

@YongCai作为一个德国人,我可以确保你,这7个额外的字符,你发现不使用德文字母。 –