regex 正则表达式模式来替换word文档xml中的日期和时间节点

k10s72fa  于 2022-12-05  发布在  其他
关注(0)|答案(1)|浏览(137)

我需要使用regex模式替换xml文件中的日期和时间。
XML文本将包含:

  • 日期:2022年12月1日1时17分
  • 日期:2022年12月1日星期二下午2时17分
  • 日期:2022年12月2日3时17分

上述正则表达式的可能模式为:

  • w:日期="[\d\W]\w[\d\W]\w”

但它不会替换任何内容,并且生成的字符串在以下VBA代码中保持不变:

Sub ChangeDateTime()

    Dim sWOOXML As String
    
    Set objRegEx = CreateObject("vbscript.regexp")
    objRegEx.Global = True
    objRegEx.IgnoreCase = True
    objRegEx.MultiLine = True
    
    objRegEx.Pattern = "w:date=" & Chr(34) & "[\d\W]\w[\d\W]\w" & Chr(34)
    
    sWOOXML = ActiveDocument.Content.WordOpenXML
    sWOOXML = objRegEx.Replace(sWOOXML, "")
        
    ActiveDocument.Content.InsertXML sWOOXML
    
    Beep
    
End Sub
btxsgosb

btxsgosb1#

您的[\d\W]\w[\d\W]\w正则表达式阻止匹配,因为它只找到两个双引号之间的数字或非单词字符+单词字符序列的两次重复,而您在那里有更多的字符。
您可以使用

objRegEx.Pattern = "w:date=""\d{4}-\d{1,2}-\d{1,2}T\d{1,2}:\d{1,2}:\d{1,2}Z"""

请参阅regex demo。注意,您可以使用双"将双引号添加到字符串中,而不需要使用Chr(34)
这是一个详细的模式,其中\d{1,2}匹配一个或两个数字,\d{4}匹配四个数字,其余的是不言自明的。

相关问题