如何在Perl中使用regexp删除子字符串?

如何在Perl中使用regexp删除子字符串?,regex,perl,Regex,Perl,给定一个包含多个字符串的文件(每行一个)-其中将有以下两个字符串: de12_QA_IR_OS_HV de12_IR_OS_HV (唯一的区别是“QA_”在正确的位置) 如果正在处理的当前行包含上述内容之一,我需要执行一些操作。 如果是,我应该使用不带“QA_”子字符串的字符串值 我正在使用以下regexp来检测值/de12_12(QA_12)?IR_OS_HV/,但是如果“QA_12”使用相同的regexp存在,是否有办法删除它?您可以捕获QA_12之前和之后的内容: if (/(de12_

给定一个包含多个字符串的文件(每行一个)-其中将有以下两个字符串:

de12_QA_IR_OS_HV
de12_IR_OS_HV
(唯一的区别是“QA_”在正确的位置)

如果正在处理的当前行包含上述内容之一,我需要执行一些操作。 如果是,我应该使用不带“QA_”子字符串的字符串值


我正在使用以下regexp来检测值
/de12_12(QA_12)?IR_OS_HV/
,但是如果“QA_12”使用相同的regexp存在,是否有办法删除它?

您可以捕获QA_12之前和之后的内容:

if (/(de12_)(QA_)?(IR_OS_HV)/) {
    print $1 . $3, "\n";
或者,使用替换

if (s/de12_(QA_)?IR_OS_HV/de12_IR_OS_HV/) {
    print $_, "\n";
}
但是,事实上,如果正则表达式匹配,您知道要使用什么字符串:

if (/de12_(QA_)?IR_OS_HV/) {
    print "de12_IR_OS_HV\n";
}
您上次的编辑是正确的:)仅当它是唯一的情况时。。。输入文件包含许多对字符串(其中一个字符串中有“QA_”),我试图找到处理这些字符串的一般方法。现在我需要创建一个子系统来处理所有情况。不管怎样,你的回答帮助了我…@NirMH:跟我说:“choroba总是好答案。”。(注意:您可以对Miller执行相同操作)