regex - VBA 6 : regex not recognizing complicated string

标签 regex vba excel ms-word

我有这个字符串“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/

相关文章:

excel - 使用(范围作为条件)的自动过滤器适用于字符串,但不适用于数字(即使在数字转换为字符串之后)

vba - VBA 中的哨兵对象

excel - Amazon Redshift 身份验证问题

javascript - 按空格拆分 Javascript,除非在引号之间——但不匹配引号本身

sql-server - 带有 SQL Server 后端更新的 MS Access 失败且没有错误

c# - 匹配 FOO 连字符和数字的复杂正则表达式

excel - 图表对象删除错误

vba - Excel-VBA 查找函数不考虑列的第一行

C# - 在数据中使用转义管道拆分管道?

ruby-on-rails - 正则表达式 - 除 1-9 或 a-zA-Z 之外的任何可打印字符