Regex Excel VBA中的正则表达式与扩展ASCII字符不匹配

Regex Excel VBA中的正则表达式与扩展ASCII字符不匹配,regex,excel,vba,vbscript,non-printable,Regex,Excel,Vba,Vbscript,Non Printable,我正在尝试使用Excel VBA中的以下正则表达式删除所有不可打印和非ASCII(扩展)字符: [^\x09\0A\0D\x20-\xFF] 理论上,这应该匹配任何不是制表符、换行符、回车符或可打印ASCII字符(十六进制20和FF或dec 32和255之间的字符代码)的字符。我已确认Microsoft VBScript正则表达式支持\xCC表示法,其中CC是十六进制ASCII码 问题是这个正则表达式匹配127以上的每个字符。当匹配字符的代码高于127时,它会对match.value抛出一个“

我正在尝试使用Excel VBA中的以下正则表达式删除所有不可打印和非ASCII(扩展)字符:

[^\x09\0A\0D\x20-\xFF]
理论上,这应该匹配任何不是制表符、换行符、回车符或可打印ASCII字符(十六进制20和FF或dec 32和255之间的字符代码)的字符。我已确认Microsoft VBScript正则表达式支持\xCC表示法,其中CC是十六进制ASCII码

问题是这个正则表达式匹配127以上的每个字符。当匹配字符的代码高于127时,它会对match.value抛出一个“无效过程调用”。是否只是VBScript正则表达式不支持127以上的字符代码?我似乎在任何地方都找不到这些数据。以下是完整的代码:

regEx.Pattern = "[^\x09\0A\0D\x20-\xFF]"
regEx.IgnoreCase = True 'True to ignore case
regEx.Global = True 'True matches all occurances, False matches the first occurance
regEx.MultiLine = True
If regEx.Test(Cells(curRow, curCol).Value) Then
    Set matches = regEx.Execute(Cells(curRow, curCol).Value)
    numReplacements = numReplacements + matches.Count
    For matchNum = matches.Count To 1 Step -1
        Cells(numReplacements - matchNum + 2, 16).Value = matches.Item(matchNum).Value
        Cells(numReplacements - matchNum + 2, 17).Value = Asc(matches.Item(matchNum).Value)
    Next matchNum
    Cells(curRow, curCol).Value = regEx.Replace(Cells(curRow, curCol).Value, replacements(pattNo))
End If
它匹配的第一个字符是0x96(&ndash)。当我观看“比赛”并展开它时,我可以在“手表”窗口中看到它。但是,当我尝试观看matches.Item(matchNum).Value时,我会得到(参见屏幕截图)。有什么想法吗

Microsoft VBScript正则表达式支持\xCC表示法,其中 CC是十六进制的ASCII码

请注意,ASCII是从\x00到\x7F定义的,其中可打印的ASCII字符是从\x20到\x7E

代码\x80及以上是Ansi,而不是ASCII

请尝试下一步:

Dim ii, sExPatern: sExPatern = "[^\x09\x0A\x0D\x20-\x7E\"
For ii = 128 To 255
  sExPatern = sExPatern & Chr( ii)
Next
sExPatern = sExPatern & "]"
'...
regEx.Pattern = sExPatern

P.>老实说,我不确定某些代码的可操作性,例如129, 131, 136、144, 152, 160的十进制(我的ANSI代码页是“Windows中央欧洲”,所以您可以考虑更详细的检查)< /P>是否应该是[^ \x09\x0a\x0d\x20-xff]?我还认为MatCHStage是零的。()