我正在尝试使用PowerShell去除string中的奇怪字符。 我用下面的输出来尝试自己学习:
get-help about_regular_expressions
我想要一个string,主要是ASCII,但有一个exception字符,需要删除。 (注册的商标符号; R围着一个圆圈。)我想从string中去除任何出现的字符,所有的东西都保持不变。 什么是使用PowerShell 2.0完成这个干净的expression?
[编辑]
我做了一些进一步的挖掘,我相信这个问题是源于我正在使用的Import-CSV调用。
当我从记事本中将此符号剪切并粘贴到PS提示符中,并将其分配给一个string时,我就可以很好地匹配:
# 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调用保持string不变,以便调用单个字段的匹配仍然可以工作?
请注意,控制台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)","")
根据您的问题更新:
在通过Import-Csv运行之前,您需要将ASCII文件转换为Unicode / UTF8格式 – 我没有意识到您正在使用此文件。 大家看看这个和其他的例子。
您可能只想将最初的CSV文件转换为Get-Content或Export-Csv -Encoding Unicode来预处理文件,并使生活更轻松。