Perl正则表达式,用于将下划线或正斜杠替换为短划线

nhaq1z21  于 2022-11-15  发布在  Perl
关注(0)|答案(1)|浏览(249)

虽然这里有几个正则表达式的例子显示了许多变化,简单地说,我只是想在Perl中使用正则表达式搜索2个不同的字符串,一个字符串作为下划线(_),另一个字符串作为正斜杠(/),并将每个字符串替换为连字符(-)加字符串。我使用的是分隔符反斜杠,但它是不正确的输出。

Input:          Output:
_APPLE          -APPLE
/APPLE          -APPLE

下面是我的代码:

$string1 =~ s/\_\/APPLE/-APPLE
$string2 =~ s/\/\/APPLE/-APPLE
e7arh2l6

e7arh2l61#

该代码有一个额外的(转义的)/,并将匹配带有_/的字符串(在第二种情况下是//)。这不在您的数据中,数据只有_/,而不是两者都有。
此外,如果_不是分隔符,则不需要转义_,也不需要转义/
要匹配几个字符中的任何一个,最干净和最有效的是 character class

$string =~ s{[_/](\w+)}{-$1};

这里也可以使用 * 交替 *

$string =~ s{(?:_|/)(\w+)}{-$1};

但是当匹配的可能性具有更多的字符(word|another)时,
这里有很多假设,考虑到问题中指定的很少。例如,\w也匹配数字,_沿着字母。如果你澄清了要求,我会根据需要进行编辑。
我假设缺少的结束分隔符(编译代码所需的)是发布中的一个打字错误。

相关问题