首页 > 解决方案 > 在循环中选择第一个出现的数字的正则表达式

问题描述

所以基本上我有这些类型的字符串

独特的

十进制字符串

百

我想替换出现的第一个数字,不幸的是它们有时会出现数百个小数或唯一值。这是我尝试使用的代码和模式。

Sub Validator()
Dim r As Range
Dim s As String
Dim news As String
Dim regex As New RegExp
Dim regex2 As New RegExp
regex.Global = True
regex.Pattern = ",[\s\S]*$"
regex2.Pattern = "(^|\\s)([0-9]+)($|\\s)"


Sheet1.Activate


For Each r In Range("B1:B17")
    s = r.Value
    
    news = regex2.Replace(s, " ")
    
    r.Value = news

Next r

End Sub

请忽略模式 1,他基本上去掉了逗号后的所有内容,问题是模式 2,当我执行我的代码时它基本上什么都不做,我知道代码是正常的,因为第一个代码是正确的。

A3 Sport 1.8 16V TFSI S-tronic 3p

A3 轿车 Prestige Plus 1.4 TFSI Flex Tip

TT 1.8 TB 180cv

应该是最终结果

标签: regexvba

解决方案


您可以使用删除第一个数字

Sub Validator()
Dim r As Range
Dim s As String
Dim news As String
Dim regex As New RegExp
Dim regex2 As New RegExp
regex.Global = False             ' <---- Enabling first match search only (you may also just remove this line)
regex2.Pattern = "\d+(?:\.\d+)?" ' <---- One or more digits, and an optional occurrence of
                                 '       a dot and one or more digits right after
Sheet1.Activate
For Each r In Range("B1:B17")
    s = r.Value
    r.Value = regex2.Replace(s, " ")
Next r

End Sub

请注意,regex.Global默认值为False,因此您可以简单地删除带有 的行regex.Global = False

如果您的数字可以有混合的小数分隔符,例如.and ,,请使用regex2.Pattern = "\d+(?:[.,]\d+)?".


推荐阅读