我正在尝试找到一种使用Powershell脚本执行以下操作的方法。
通过非ASCII字符,我指的是非键盘字符(A-Z,0-9),例如重音字符,其他语言的字符等。
样本数据
- 张伟
- குழந்தைகளுக்கான பெயர்கள்
- 日本人の氏名
- Full Name
- Léna Rémi
输出数据
- 张伟
- குழந்தைகளுக்கான பெயர்கள்
- 日本人の氏名
- Léna Rémi
我在其他线程中找到了正则表达式以删除非ASCII字符,但似乎无法使其正常工作。
请帮助!
[定义一个描述所有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]'}
这是一个脚本,我必须从xml文件中删除非ASCII字符。也许您可以将其用作起点。我要删除ascii table中空格和代字号之间的字符,也不要制表符。对我来说,ASCII范围是0-127。获取内容会删除回车和换行符。
(get-content $args[0]) -replace '[^ -~\t]' | set-content $args[0]