在Notepad ++中更改并移动时间戳

时间:2016-12-29 03:46:22

标签: regex notepad++

我有一个由一系列行组成的文档。在每行的中间有yy.mm.dd形式的时间戳,例如15.12.05

在Notepad ++中使用PCRE(Perl兼容的正则表达式),我该如何做?

  1. 将每个时间戳从其中间行移动到其行的末尾。
  2. 将每个时间戳的格式从yy.mm.dd更改为mmm dd, yyyy,例如Dec 05, 2015

1 个答案:

答案 0 :(得分:1)

这个问题有三个部分。

  1. 如何从每一行中提取格式为yy.mm.dd的时间戳。
  2. 如何将所述时间戳移动到该行的末尾。
  3. 如何更改时间戳的格式。
  4. 1。提取时间戳

    此正则表达式可以匹配时间戳格式yy.mm.dd

    \d{2}\.\d{2}\.\d{2}
    

    如果可以假设每个时间戳都继续进行,然后是非单词,那么这个正则表达式会更好:

    \b\d{2}\.\d{2}\.\d{2}\b
    

    2。移动时间戳

    为了使用find / replace将时间戳移动到行尾,您需要在单独的组中匹配时间戳和行的其余内容。 (以下假设每行只有一个时间戳)

    Find:     ^(?<begin>.*?)(?<timestamp>\b\d{2}\.\d{2}\.\d{2}\b)(?<end>[^$]*)$
    Replace:  \k<begin>\k<end> \k<timestamp>
    

    3。格式化时间戳

    在提取和移动时,您应该在单独的操作中格式化时间戳。这是因为您需要执行12次单独的查找/替换操作才能正确转换时间戳格式,每月一次。

       Find:     (?<year>\d{2})\.01\.(?<day>\d{2})$
       Replace:  Jan \k<day>, 20\k<year>
    
       Find:     (?<year>\d{2})\.02\.(?<day>\d{2})$
       Replace:  Feb \k<day>, 20\k<year>
    
       ...
    
       Find:     (?<year>\d{2})\.12\.(?<day>\d{2})$
       Replace:  Dec \k<day>, 20\k<year>
    

    请注意,这假设每年都是> = 2000。