Powershell在文本文件中查找非ASCII字符

问题描述 投票:0回答:2

我正在尝试找到一种使用Powershell脚本执行以下操作的方法。

  1. 对于文本文件中的每一行,请检查行是否包含非ASCII字符
  2. 如果行包含非ASCII字符,则输出到单独的文件中
  3. 如果行不包含非ASCII字符,请跳至下一行

通过非ASCII字符,我指的是非键盘字符(A-Z,0-9),例如重音字符,其他语言的字符等。

样本数据

 - 张伟
 - குழந்தைகளுக்கான பெயர்கள்
 - 日本人の氏名
 - Full Name
 - Léna Rémi

输出数据

 - 张伟
 - குழந்தைகளுக்கான பெயர்கள்
 - 日本人の氏名
 - Léna Rémi

我在其他线程中找到了正则表达式以删除非ASCII字符,但似乎无法使其正常工作。

请帮助!

powershell non-ascii-characters
2个回答
0
投票

[定义一个描述所有ASCII字符的字符集(代码点32到127 == [\x20-\x7F]),然后用^取反以匹配任何非ASCII字符!

让我们针对我的(非ASCII)名称进行测试:

PS C:\> 'Mathias R. Jessen' -cmatch '[^\x20-\x7F]'
False
PS C:\> 'Mathias Rørbo Jessen' -cmatch '[^\x20-\x7F]'
True

要过滤字符串列表,只需在过滤器模式下使用-cmatch运算符:

$strings = 'குழந்தைகளுக்கான பெயர்கள்', 'Boring John Doe', 'Léna Rémi'

$nonASCIIstrings = @($strings) -cmatch '[^\x20-\x7F]'

或者,如果要沿管道过滤,请使用Where-Object

$strings |Where-Object {$_ -cmatch '[^\x20-\x7F]'}

0
投票

这是一个脚本,我必须从xml文件中删除非ASCII字符。也许您可以将其用作起点。我要删除ascii table中空格和代字号之间的字符,也不要制表符。对我来说,ASCII范围是0-127。获取内容会删除回车和换行符。

(get-content $args[0]) -replace '[^ -~\t]' | set-content $args[0]
© www.soinside.com 2019 - 2024. All rights reserved.