Perl正则表达式删除数字/标点符号组合

Jam*_*s B 0 regex perl

我正在尝试删除由空格分隔的字符串中的所有数字/标点符号组合,即

$string = " 13-acetate 9-11 777 >3 ctl-54 2!3 ";
Run Code Online (Sandbox Code Playgroud)

应该成为

$string = " 13-acetate ctl-54 ";
Run Code Online (Sandbox Code Playgroud)

我的尝试如下

$string =~ s/\s+[\d*[:punct:]>]+\s+//g;
Run Code Online (Sandbox Code Playgroud)

但是这给了我

$string = " 13-acetate 777 ctl-54 ";
Run Code Online (Sandbox Code Playgroud)

感谢指出我出错的地方.

ike*_*ami 5

问题是你试图在两遍中匹配相同的空间.你需要使用lookarounds.

s/(?<!\S)[\d\p{Punct}\p{Symbol}]+(?!\S)//g;
Run Code Online (Sandbox Code Playgroud)

我使用负向前看并查看后面,这样您就不需要在输入字符串中添加前导和尾随空格.