regex - 将四位数的年份日期替换为两位数
问题描述
好吧,我想做的是用 4 位数到 2 位数替换年份,比如
2018年仅18
例如:“FIAT - 147 / Elba / Fiorino / Oggi / Panorama / Premio / Spazio / Uno - 01/1976 - 12/2001 - Mille - 1.0 8V / 1.050 / 1.3 / 1.5”
就像“FIAT - 147 / Elba / Fiorino / Oggi / Panorama / Premio / Spazio / Uno - 01/76 - 12/01 - Mille - 1.0 8V / 1.050 / 1.3 / 1.5”
我尝试使用 regex.replace 但它没有用......
Sub test()
Dim x, z
y = "FIAT - 147 / Elba / Fiorino / Oggi / Panorama / Premio / Spazio / Uno - 01/1976 - 12/2001 - Mille - 1.0 8V / 1.050 / 1.3 / 1.5"
Set regx = CreateObject("vbscript.regexp")
regx.Pattern = "(\d{4})"
regx.Global = True
Set x = regx.Execute(y)
Debug.Print regx.Replace(y, Right(x.Item(0), 2))
End Sub
它会返回这个
FIAT - 147 / Elba / Fiorino / Oggi / Panorama / Premio / Spazio / Uno - 01/76 - 12/76 - Mille - 1.0 8V / 1.050 / 1.3 / 1.5
有什么帮助吗?我尝试使用正则表达式来查找 4 年的数字,但是如果您对公式有任何想法,那很好
解决方案
.Replace
直接与匹配年份的前 2 位数字并匹配并捕获最后 2 位数字的正则表达式一起使用:
y = "FIAT - 147 / Elba / Fiorino / Oggi / Panorama / Premio / Spazio / Uno - 01/1976 - 12/2001 - Mille - 1.0 8V / 1.050 / 1.3 / 1.5"
Set regx = CreateObject("vbscript.regexp")
regx.Pattern = "\b\d{2}(\d{2})\b"
regx.Global = True
Debug.Print regx.Replace(y, "$1")
输出:
FIAT - 147 / Elba / Fiorino / Oggi / Panorama / Premio / Spazio / Uno - 01/76 - 12/01 - Mille - 1.0 8V / 1.050 / 1.3 / 1.5
请参阅正则表达式演示。
模式\b\d{2}(\d{2})\b
匹配
\b
- 单词边界\d{2}
- 任意 2 位数字(\d{2})
- 第 1 组($1
指替换模式中的此值):年份的结尾两位数\b
- 单词边界
如果您的年份值可能粘在其他数字、字母或_
字符上,则可以删除单词边界。也可以针对这些位置进一步调整正则表达式。
推荐阅读
- unity3d - IBM Watson Text to Speech credentials.HasIamTokenData() 每次都返回 null
- javascript - 如何解决 addEventListener 的问题:无法读取未定义的属性“currentTarget”
- javascript - 创建反应应用程序无法安装 Eslint
- c# - 在 C# 中累积值
- android - 尝试展示我的第一个真实广告后,Admob 帐户被禁用
- delphi - 将 TObject 转换为 TMenuItem 并检索标题将 & 添加到字符串
- android - 如何通过共享将文件发送到 Flutter 应用程序?
- excel - 如何在工作簿中搜索值以确定是否应更新页面
- python - JSON 文件格式的字典
- html - Chrome (Mac) 和 MS Edge (Win) 中显示的神秘空白/“缺少图标”字符框