【问题标题】:Find and replace changing date format in notepad++ using regular expressions使用正则表达式在记事本++中查找和替换更改的日期格式
【发布时间】:2021-12-18 02:31:45
【问题描述】:

我需要更改 SQL 文件中许多值的日期格式。

有些日期值采用“DD-MON-RR”格式,但我需要它们采用“YYYY-MM-DD”格式。

在文件中我有 21 世纪和 20 世纪的日期:

to_date('01-Nov-20','DD-MON-RR'),to_date('28-Dec-99','DD-MON-RR')

我正在寻找一个正则表达式来查找和替换这些值。

这是我的第一次尝试,即使在 20 世纪也可以使用:

FIND: 
(\d{2})-(\w{3})-(([0-4])\d|[5-9]\d)

REPLACE: 
(?{4}20:19)\3-\2-\1

这有助于重新排列元素的位置,但我必须用相关数字替换所有月份。

现在我正在寻找可以在同一个正则表达式中查找和替换月份名称的内容:

FIND: 
(\d{2})-((Jan)|(Feb)|(Mar)|(Apr)|(May)|(Jun)|(Jul)|(Aug)|(Sep)|(Oct)|(Nov)|(Dec))-(([0-4])\d|[5-9]\d)

现在我在尝试编写替换表达式时遇到了麻烦,有人可以帮助我吗?

谢谢

【问题讨论】:

    标签: regex string date notepad++


    【解决方案1】:

    您可以定义尽可能多的月份(月份缩写)而不是 (\w{3}),并在条件替换模式中使用更多条件。

    你可以使用

    查找内容(\d{2})-(?:(Jan)|(Feb)|(Mar)|(Apr)|(May)|(Jun)|(Jul)|(Aug)|(Sep)|(Oct)|(Nov)|(Dec))-(([0-4])\d|[5-9]\d)
    替换为(?{15}20:19)$14-(?{13}12:?{12}11:?{11}10:?{10}09:?{9}08:?{8}07:?{7}06:?{6}05:?{5}04:?{4}03:?{3}02:?{2}01)-$1

    查看演示截图:

    因此,(\w{3}) 被替换为 (?:(Jan)|(Feb)|(Mar)|(Apr)|(May)|(Jun)|(Jul)|(Aug)|(Sep)|(Oct)|(Nov)|(Dec)),这是一个具有 12 个捕获组的非捕获组。你可以编辑它,比如说,也支持Sept,在Sep之后添加t?,或者在Jun之后添加e?也支持June

    调整替换模式以适应新引入的 12 个捕获组。

    【讨论】:

    • 为什么不使用一个单独的捕获组,例如(Jan|Feb|Mar|…)
    • @knittl 因为每个月组应该单独测试匹配,否则,你的条件替换模式不能使用。
    • 我明白了。谢谢。我从未在 NP++ 中使用过条件替换
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-10
    • 2020-04-29
    • 1970-01-01
    • 2013-03-19
    • 2019-02-10
    • 2011-07-19
    相关资源
    最近更新 更多