我正在尝试删除由空格分隔的字符串中的所有数字/标点符号组合,即
$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)
感谢指出我出错的地方.
问题是你试图在两遍中匹配相同的空间.你需要使用lookarounds.
s/(?<!\S)[\d\p{Punct}\p{Symbol}]+(?!\S)//g;
Run Code Online (Sandbox Code Playgroud)
我使用负向前看并查看后面,这样您就不需要在输入字符串中添加前导和尾随空格.