首页 > 解决方案 > 正则表达式与带引号的 perl 匹配

问题描述

我正在读取一个文件,我想找到一个时间戳值并将其替换为 0,然后再将其输出到另一个文件。所以我试图在文件 TIME="00000000.0000000" 中搜索并替换这个值 TIME="20180731.5622743"

到目前为止我有..

open(INPUT, $path) or die $!;
open(OUTPUT, ">$susex_path")  or die $!;

while(<INPUT>){
   $line =~ s/([0-9]+8.[0-9]+7)/000000.0000000/g;
   print OUTPUT $line;
   }
}
close(INPUT);    
close(OUTPUT);

搜索和替换仅部分起作用,因为该行包含我不想替换的其他时间戳。如果我包含完整的位来搜索和替换引号似乎会阻止成功的搜索和替换..例如(

$line =~ s/TIME=\"([0-9]+8.[0-9]+7)\"/TIME=\"00000000.0000000\"/g

任何帮助深表感谢

标签: regexperl

解决方案


试试这个可能更快

$line =~ s/TIME="[0-9]{8}\.[0-9]{7}"/TIME="00000000.0000000"/g

请注意,正如您对问题的评论中提到的,您需要 {8} 和 {7} 而不是 +8 和 +7"s///.

然而.是特殊的,需要逃避;( ... )除非您想在正则表达式之外使用原始时间戳,否则您也不需要


推荐阅读