【问题标题】:Perl - Regex substitution does not workPerl - 正则表达式替换不起作用
【发布时间】:2014-03-03 21:30:36
【问题描述】:

我的正则表达式应该用单词“TIMESTAMP”替换较大的 csv 文件中的日期。

示例数据

TEXT12, TEXT312, 22.11.2013 13:30:16, abcd,

代码

while(<>) {                                                           
  s/[0-9]{2}.[0-9]{2}.[0-9]{4}\s[0-9]{2}:[0-9]{2}:[0-9]{2}/TIMESTAMP/;
  print $_;                                                           
}    

 

我用 RegexBuddy 检查了正则表达式,它在那里成功匹配,但在 Perl 程序中它不起作用。在 Linux 和 Windows 上尝试了 Perl 5.14 和 Perl 5.18,没有成功。

哪里错了?!

【问题讨论】:

    标签: regex perl


    【解决方案1】:

    你必须转义点.

    试试这个:

    s/[0-9]{2}\.[0-9]{2}\.[0-9]{4}\s[0-9]{2}:[0-9]{2}:[0-9]{2}/TIMESTAMP/;
    

    【讨论】:

    • @royskatt 在你的情况下 .\. 都匹配点字符。
    【解决方案2】:

    答案在您的 csv 文件中,数字之间可能有多个空格,因此请使用 \s+

    s/[0-9]{2}\.[0-9]{2}\.[0-9]{4}\s+[0-9]{2}:[0-9]{2}:[0-9]{2}/TIMESTAMP/;
    

    此外,当您想匹配文字 . char 时,您必须将其转义 \. 或使用正则表达式类 [.]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-13
      • 1970-01-01
      • 2023-03-23
      • 2013-11-03
      • 1970-01-01
      相关资源
      最近更新 更多