我有这个字符串“1X214X942,0SX”
,其中每个X代表一个“不间断空格”(确切地说是空白),ASCII代码为160,S代表一个空格字符。
我试图用这个正则表达式来识别它:
(\d{1,3}\s(\d{3}\s)*\d{3}(\,\d{1,3})?|\d{1,3}\,\d{1,3})
但它不起作用,因为该空格无法识别,并且表达式仅捕获 942,0
。
我尝试看看 RegExr 是否可以捕获整个字符串,它可以( http://gskinner.com/RegExr/?2v8ic ),那么我的 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
最佳答案
序列 \s
与不间断空格不匹配,但是有一些方法可以做到这一点。您要考虑在正则表达式中使用的原子是 \xnn
或 \nnn
——它们通过十六进制值或八进制值来匹配字符。
因此,要匹配 ASCII 160 的不间断空格,请指定 \xA0
或 \240
之一,而不是 \s
。
关于regex - VBA 6 : regex not recognizing complicated string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8501586/