regex - 在循环中选择第一个出现的数字的正则表达式
问题描述
所以基本上我有这些类型的字符串
我想替换出现的第一个数字,不幸的是它们有时会出现数百个小数或唯一值。这是我尝试使用的代码和模式。
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
应该是最终结果
解决方案
您可以使用删除第一个数字
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+)?"
.
推荐阅读
- ios - 您是否需要将 iPhone 应用程序与 Apple Watch 应用程序一起提交?
- java - 使用正则表达式删除图像名称的子字符串
- quire-api - Quire API Task.tags 始终为空
- linux - 连接 I2C 总线,i2cset:写入失败:连接超时
- reactjs - 将值从一个组件传递到 Gatsby 中的另一个组件
- c# - 为什么当我水平移动精灵时 Unity 会崩溃?
- python - 使用 Selenium 和 Xpath 进行网页抓取
- php - 在 Yii2 中为 url 添加语言
- python - 通过python保存文件后现有条件格式被破坏
- angularjs - 如何在 Angular 中为 Azure blob 容器生成 SAS 令牌?