用四位数替代两位数的年份日期

时间:2019-05-07 13:00:05

标签: regex excel vba excel-formula

好吧,我想做的是用4位到2位代替年份

2018年只有18

例如:“菲亚特-147 /厄尔巴岛/菲奥里诺/奥吉/全景/普里米奥/斯帕齐奥/乌诺-01/1976-12/2001-米勒-1.0 8V / 1.050 / 1.3 / 1.5”

就像 “ FIAT-147 /厄尔巴岛/菲奥里诺/奥吉/全景/ 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年的数字,但是如果您对公式有任何想法,就可以了

1 个答案:

答案 0 :(得分:5)

直接将.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

请参见regex demo

\b\d{2}(\d{2})\b模式匹配

  • \b-单词边界
  • \d{2}-任意两位数字
  • (\d{2})-第1组($1是指替换模式中的该值):一年的后两位数字
  • \b-单词边界

如果您将年份值粘贴到其他数字,字母或_字符上,则可能会删除单词边界。可以针对这些位置对正则表达式进行进一步的调整。