我正在尝试使用 PowerShell 从字符串中去除奇数字符。我使用以下输出尝试自学:
get-help about_regular_expressions
我正在尝试获取一个主要为 ASCII 的字符串,但该字符串中有一个需要删除的异常字符。(注册商标符号;带圆圈的 R。)我想从字符串中删除该字符的任何出现,而保留其他所有内容。使用 PowerShell 2.0 实现此目的的最简洁表达式是什么?
[编辑]
我做了进一步的挖掘,我相信问题源于我正在使用的 Import-CSV 调用。
当我从记事本中剪切并粘贴此符号到 PS 提示符中,并将其分配给一个字符串时,匹配得很好:
# This code yields 'True'
$string -match "\u00ae"
但是,当我在 CSV 文件上使用 Import-CSV 时,其中一个字段包含特殊符号,我相信原始字节会以某种方式被转换,因为执行这样的操作不起作用:
# This code yields 'False'
$source = Import-CSV -path testing.csv
# The following extracts the entry / line containing the special symbol that was
# copy-and-pasted above
$culprit = $source[5].COMMITTEE_NAME
$culprit -match "\u00ae"
但是,以下方法确实有效:
# This yields True
$filedata = get-content testing.csv
$filedata[6] -match "\u00ae"
所以我想我对这一切的后续问题是:
我怎样才能通过 import-csv 调用保持字符串完整,以便对各个字段的 -match 调用仍然有效?
答案1
值得注意的是,控制台 PS 不能很好地显示 Unicode。您必须使用 ISE 才能“看到”发生了什么。请查看这个相关的SO问题一些额外的阅读材料。能无论如何,如果您不需要观看脚本的实际运行,请在 PS 中使用 ® 字符。
在 ISE 中:
PS C:\Users\jscott> $string = "This string contains the ® character"
PS C:\Users\jscott> $string
This string contains the ® character
PS C:\Users\jscott> $string.Replace("®","")
This string contains the character
PS C:\Users\jscott> $string ="This ® string ® contains ® many ® characters ®®®®"
PS C:\Users\jscott> $string
This ® string ® contains ® many ® characters ®®®®
PS C:\Users\jscott> $string.Replace("®","")
This string contains many characters
要使用字符代码而不是文字:
PS C:\Users\jscott> $string.Replace("$([char]0x00AE)","")
根据您的问题更新:
您需要将 ASCII 文件转换为 Unicode/UTF8 才能运行它Import-Csv
——我不知道您在使用这个。请大家看一下这和这其他示例。
您可能只想通过管道传输初始 CSV 文件Get-Content
或Export-Csv -Encoding Unicode
对文件进行预处理,让生活变得更轻松。