VBA 6:正则expression式不识别复杂的string

我有这个string"1X214X942,0SX" ,其中每个X代表一个ASCII代码160的“非破坏空间”(一个确切的空格),S代表一个空格字符。

我试图用这个正则expression式来识别它:

 (\d{1,3}\s(\d{3}\s)*\d{3}(\,\d{1,3})?|\d{1,3}\,\d{1,3}) 

但它不起作用,因为这个空格不被识别,expression式只捕获942,0

我试图看看RegExr是否可以捕获整个string,它可以,所以我的VBA有什么问题吗?

请指教 !

这是我的代码:

 Sub ChangeNumberFromFRformatToENformat() Dim SectionText As String Dim RegEx As Object, RegC As Object, RegM As Object Dim i As Integer Set RegEx = CreateObject("vbscript.regexp") With RegEx .Global = True .MultiLine = False .Pattern = "(\d{1,3}\s(\d{3}\s)*\d{3}(\,\d{1,3})?|\d{1,3}\,\d{1,3})" End With For i = 1 To ActiveDocument.Sections.Count() SectionText = ActiveDocument.Sections(i).Range.Text If RegEx.test(SectionText) Then Set RegC = RegEx.Execute(SectionText) For Each RegM In RegC Call ChangeThousandAndDecimalSeparator(RegM.Value) Next 'For Each RegM In RegC Set RegC = Nothing Set RegM = Nothing End If Next 'For i = 6 To ActiveDocument.Sections.Count() Set RegEx = Nothing End Sub 

该序列不符合非破坏性的空间,但有办法可以做到这一点。 你想考虑在正则expression式中使用的primefaces是\xnn\nnn – 它们通过它的hex值或八进制值匹配一个字符。

因此,要匹配ASCII 160的非\xA0空间,请指定\xA0\240一个,而不是\s

问题是, \s不包含VBScript.RegExp实现中的非破坏空间。

试试这个:

 With RegEx .Global = True .MultiLine = False .Pattern = "(\d{1,3}X(\d{3}X)*\d{3}(,\d{1,3})?|\d{1,3},\d{1,3})" .Pattern = Replace(.Pattern, "X", "[\s" & Chr(160) & "]") End With 

正则expression式模式匹配您放入它们的文字字符,即使是非破坏性的空间。 向VBstring添加一个不间断空格的唯一方法是使用Chr()创build它。