perl - 在 Perl 中使用两个搜索和替换正则表达式命令
问题描述
在文件中,我必须替换
.L1 to L_xx_1
.L2 to L_xx_2
.L3 to L_xx_3
...
和
.LC1 to LC_xx_1
.LC2 to Lc_xx_2
.LC3 to LC_xx_3
...
对于这两个搜索和替换,我有两个不同的 Perl 脚本,其中包含以下两个不同的循环:
for ($i=0; $currentLine=<file>; $i++) {
$currentLine =~ s/.L(\d+)/L_$ARGV[1]_$1/gi;
print $currentLine;
}
和
for ($i=0; $currentLine=<file>; $i++) {
$currentLine =~ s/.LC(\d+)/LC_$ARGV[1]_$1/gi;
print $currentLine;
}
分别。
我可以通过将两个 S 命令合并为一个来将这两个循环合并为一个吗?
解决方案
是的,您可以使用不同的正则表达式将 2 个替换组合为一个。您可以捕获“L”,然后是可选的“C”。
use warnings;
use strict;
my $str = 'xx';
while (my $currentLine = <DATA>) {
$currentLine =~ s/\.(LC?)(\d+)/$1_${str}_$2/gi;
print $currentLine;
}
__DATA__
.L1
.L2
.L3
.LC1
.LC2
.LC3
这打印:
L_xx_1
L_xx_2
L_xx_3
LC_xx_1
LC_xx_2
LC_xx_3
请注意,我转义了第一个字符(句点)。这将只匹配文字句点。
推荐阅读
- numpy - Numpy 给出了错误的特征向量?
- c++ - 如何为依赖类型扩展参数包?
- angular - 调用 Firebase 函数会引发错误 - ERROR TypeError: Gb.functions is not a function
- python - PyTorch 循环遍历 epoch,然后输出所有 epoch 的最终值
- html - 带输入字段的中心单选按钮
- java - Java 8:将流中的值分配给变量?
- reduce - 如何删除带有属性重复 rethinkdb 的项目
- reactjs - 如何在反应应用程序中设置锚标记的样式
- optimization - Nsight Compute 中使用的术语
- javascript - Electron:如何防止 Cmd + Q 退出?