首页 > 解决方案 > 将四位数的年份日期替换为两位数

问题描述

好吧,我想做的是用 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 年的数字,但是如果您对公式有任何想法,那很好

标签: regexexcelvbaexcel-formula

解决方案


.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- 单词边界

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


推荐阅读