正则表达式匹配tcl中的特定字符

时间:2017-01-24 01:42:03

标签: regex tcl regsub

我有一个包含以下字符的变量

“@ / $%&安培; *#{}4克_ [] 3435_.technology@lte042”

我想通过排除特殊字符来匹配“4g_.3435_.technologylte042”

代码:

For

我得到了输出:

set a "@\/$%&*#[](){}4g_.[]3435_.technology@lte042"
regexp {[\w._-]+} $a match
puts $match

我没有留下剩下的字符“lte042”

请帮忙。

2 个答案:

答案 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

文档: joinregexpsetSyntax of Tcl regular expressions