gpt4 book ai didi

regex - VBA正则表达式,替换组

转载 作者:行者123 更新时间:2023-12-02 01:58:12 25 4
gpt4 key购买 nike

我正在努力在 Excel 中使用 VBA 正则表达式替换格式错误的日期字符串(和其他项目)。

我正在寻找替换具有正确 YYYY-MMM-DD 格式但缺少破折号分隔符的日期字符串 - 例如:

2014,APRIL,04 or 
2014.Apr,04 or
2014/Apr-04

我希望它们的格式类似于以下任一格式:

2014-Apr-04
2014-April-04

(即保留所提供的年、月、日元素,但只需用破折号而不是逗号、句点或其他奇怪的字符替换分隔符)

我目前拥有的代码是:

Dim RE As Object
Set RE = CreateObject("vbscript.regexp")
With RE
.Global = False ' Several occurrence to be found
.IgnoreCase = True
.Pattern = "(((19|20)[0-9]{2})[, /.]([a-zA-Z]+)[, /.](0[1-9]|[12][0-9]|3[01])[, /.])"
End With

Dim ReplacePattern As String
ReplacePattern = "$1-$2-$3"

Dim match As Boolean
match = RE.Test(LogEntryTxt)

LogEntryTxt = RE.Replace(LogEntryTxt, ReplacePattern)

但似乎替换没有正确进行。有人可以帮忙吗?我尝试过研究命名组、编号组等,但我所做的一切都没有完成它。

最佳答案

您的替换内容变得困惑,因为您在比赛的某些部分周围捕获了组,而这些组与 $1-$2-$3 不对应,无法构成 YYYY-MMM-DD。您可以保留当前的正则表达式模式并使用 $2-$4-$5 进行替换,或者采取更优雅的方法并将稍后不需要引用的捕获组更改为非捕获组:

(?:((?:19|20)[0-9]{2})[,/.]([a-zA-Z]+)[,/.](0[1 -9]|[12][0-9]|3[01])[,/.])
^^^^

然后按照您当前的操作替换为 $1-$2-$3

关于regex - VBA正则表达式,替换组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22850657/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com