我有一个包含以下字符的变量
“@ / $%&安培; *#{}4克_ [] 3435_.technology@lte042”
我想通过排除特殊字符来匹配“4g_.3435_.technologylte042”
代码:
For
我得到了输出:
set a "@\/$%&*#[](){}4g_.[]3435_.technology@lte042"
regexp {[\w._-]+} $a match
puts $match
我没有留下剩下的字符“lte042”
请帮忙。
答案 0 :(得分:3)
我想你试图删除所有非单词字符,而不是试图找到第一个连续的单词字符序列。您可以使用重复的搜索和替换:
regsub -all {[^\w._-]+} $a "" match
另一种选择是使用-all -inline
选项生成匹配列表而不是单个匹配。但是,这将在连续的匹配之间放置空格。例如:
set a "@\/$%&*#[](){}4g_.[]3435_.technology@lte042"
set match [regexp -all -inline {[\w._-]+} $a]
puts $match
==>
4g_.3435_.technology lte042
第二个set
是必需的,因为-inline
选项不允许将匹配变量指定为命令参数。
答案 1 :(得分:0)
更进一步:
% set s {@/$%&*#{}4g_.[]3435_.technology@lte042}
@/$%&*#{}4g_.[]3435_.technology@lte042
% join [regexp -inline -all {[][\w._-]+} $s] {}
4g_.[]3435_.technologylte042