我想替换字符串中除前导减号 ( -
) 之外的所有非数字字符。
例如,hu
应从 -123hu8
中删除,和-jk
应从 34-jk8
中删除.
我正在使用以下正则表达式,但它不起作用。
^[^-]|[^\d\.]
我有什么遗漏的吗?
最佳答案
因为环顾四周的成本很高,
(?!^-)\D+
可能比
慢(?:^-?+|\d++)\K\D+
我不知道这对你来说是否重要。
测试:
>perl -e"CORE::say $ARGV[0] =~ s/(?:^-?+|\d++)\K\D+//rg;" -- -123hu8
-1238
>perl -e"CORE::say $ARGV[0] =~ s/(?:^-?+|\d++)\K\D+//rg;" -- 123hu8
1238
>perl -e"CORE::say $ARGV[0] =~ s/(?:^-?+|\d++)\K\D+//rg;" -- a123hu8
1238
>perl -e"CORE::say $ARGV[0] =~ s/(?:^-?+|\d++)\K\D+//rg;" -- -a123hu8
-1238
>perl -e"CORE::say $ARGV[0] =~ s/(?:^-?+|\d++)\K\D+//rg;" -- 34-jk8
348
关于javascript - 如何使用正则表达式匹配大多数非数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55498300/