regex - 将年份日期替换为四位数到两位数

标签 regex excel vba excel-formula

嗯,我想做的是将年份替换为 4 位数到 2 位数,例如

2018 年仅 18

例如:“菲亚特 - 147/Elba/Fiorino/Oggi/Panorama/Premio/Spazio/Uno - 01/1976 - 12/2001 - Mille - 1.0 8V/1.050/1.3/1.5”

就像 “菲亚特 - 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

请参阅regex demo .

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

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

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

关于regex - 将年份日期替换为四位数到两位数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56023224/

相关文章:

c# - 从 .NET 中的字符串中提取 JSON

ruby - 如何从 Ruby 字符串中解析复杂的货币值

vba - Excel VBA 公式作为文本问题

excel - 在 VBA 函数中传递 Excel 范围,作为数组处理,并返回结果

regex - 非字符串的正则表达式

正则表达式允许以逗号分隔的代码列表

excel - 有没有其他写范围的方法

excel - 有没有办法让我的公式引用单个单元格值,以便我可以使用一个单元格更改多个公式?

vba - 如何使用 VBA 输入网站地址并进行搜索

vba - 将当前日期汇总到 15 日或月底