Perl正则语句$text =~ s{\W}{}g;的作用及Dart/Python等效实现
Perl 语句
$text =~ s{\W}{}g; 功能说明 这句代码的核心作用是删除变量$text中所有的非单词字符,修改后的值直接存回$text变量,各部分语法拆解:
=~:Perl的模式绑定操作符,指定对左侧的$text变量执行右侧的正则操作s{匹配规则}{替换值}:Perl的正则替换语法,这里匹配规则是\W,替换值是空字符串,也就是命中的字符会被直接删除\W:匹配所有非单词字符,默认语义下单词字符仅包含大小写英文字母、数字、下划线_,其余字符(标点、空格、特殊符号、非ASCII字符比如中文等)都会被命中
- 末尾的
g:全局匹配修饰符,会替换字符串中所有符合规则的字符,而非仅替换第一个匹配项
举个直观的例子:如果执行语句前$text = "Hi! 测试 2024_py",执行后$text的值为"Hi2024_py",其中感叹号、空格、中文“测试”都被删除。
等效代码实现
Python 版本
借助标准库re的全局替换方法实现,正则语义和Perl默认规则完全对齐:
import re text = re.sub(r"\W", "", text)
Dart 版本
通过字符串内置的replaceAll方法配合正则实现:
text = text.replaceAll(RegExp(r"\W"), "");
注意:上述实现和原Perl语句语义完全一致,都会把中文、全角符号等非ASCII非单词字符一并删除,如果业务场景需要保留这类字符,需要调整正则匹配规则。
内容的提问来源于stack exchange,提问作者Bid
相关产品推荐
相关产品推荐

