在VB中通过正则表达式替换处理项目符号以清除XML文件时出错
我试图清理一个XML文件,使其只包含UTF-8字符,但我遇到了一个要点问题。文件中有一个项目符号,如果我删除这些字符,regex replace的其余部分工作正常,但它似乎没有替换这个特定的项目符号字符。查看十六进制,它是0x07,使用unicode/u0007,但这两种方法都没有解决错误(“十六进制值0x07是无效字符”) 下面是我在多次迭代中使用的一些正则表达式替换代码(SSIS中的VB脚本)。任何帮助都将不胜感激在VB中通过正则表达式替换处理项目符号以清除XML文件时出错,xml,regex,unicode,utf-8,Xml,Regex,Unicode,Utf 8,我试图清理一个XML文件,使其只包含UTF-8字符,但我遇到了一个要点问题。文件中有一个项目符号,如果我删除这些字符,regex replace的其余部分工作正常,但它似乎没有替换这个特定的项目符号字符。查看十六进制,它是0x07,使用unicode/u0007,但这两种方法都没有解决错误(“十六进制值0x07是无效字符”) 下面是我在多次迭代中使用的一些正则表达式替换代码(SSIS中的VB脚本)。任何帮助都将不胜感激 XMLString = FileIO.FileSystem.Read
XMLString = FileIO.FileSystem.ReadAllText(filelocation)
'Dim rgx As Regex = New Regex("[\x00-\x08\x0B-\x0C\x0E-\x1F\u0000-\u0007]", RegexOptions.None)
'Dim rgx As Regex = New Regex("[^0-9a-zA-Z]", RegexOptions.None)
'Dim rgx As Regex = New Regex("[[:^print:]]", RegexOptions.None)
'Dim rgx As Regex = New Regex("[[:^print:][\u0007]]", RegexOptions.None)
Dim rgx As Regex = New Regex("[^\x09\x0A\x0D\x20-\xD7FF\xE000-\xFFFD\x10000-x10FFFF]", RegexOptions.None)
'Dim rgx As Regex = New Regex("[\x00-\x1F\x7F-\xFF]+", RegexOptions.None)
rgx.Replace(XMLString, "")
谢谢您需要知道的是,正则表达式是针对字节字符串还是字符字符串应用的。(在perl中有一个明显的区别,对VB不太确定——它通常由您读取数据的方式控制)。以下两点不是“规则”本身,更是好形式
- 如果针对字节运行,则应仅使用
转义序列。(和XX只能是2位数字)\xXX
- 如果针对字符运行,则应使用转义序列(\xXXXX在大多数语言中都是相同的)
还有一点:在进行替换之前,您不应该设置正则表达式的全局属性吗。这可能是你的问题吗?它修复了第一次出现而不是整个文件?您需要知道的是正则表达式是针对字节字符串还是字符字符串应用的。(在perl中有一个明显的区别,对VB不太确定——它通常由您读取数据的方式控制)。以下两点不是“规则”本身,更是好形式
- 如果针对字节运行,则应仅使用
转义序列。(和XX只能是2位数字)\xXX
- 如果针对字符运行,则应使用转义序列(\xXXXX在大多数语言中都是相同的)
还有一点:在进行替换之前,您不应该设置正则表达式的全局属性吗。这可能是你的问题吗?它修复了第一次出现,但不是整个文件?使用Powershell时,我使用了以下正则表达式:
-replace "\u2022", "" `
正如@Brian Reichle在您对Powershell的评论中提到的,我使用了以下正则表达式:
-replace "\u2022", "" `
正如@Brian Reichle在您的评论中所提到的,我认为项目符号的unicode字符是\u2022,\u0007是“Bell”字符。您好,我(目前:-)不知道为什么x07字符会出现问题,但您的两个正则表达式定义中似乎有一个输入错误:写“[^[:print:]”而不是“[:^print:]”'并再次尝试使用此模式。最好的问候,carstenI认为项目符号的unicode字符是\u2022,\u0007是“Bell”字符。您好,我不知道为什么x07字符会出现问题,但您的两个正则表达式定义中似乎有输入错误:写“[^[:print:]”而不是“[:^print:]”,然后再次尝试使用此模式。向你问好,卡斯滕