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

Regexp to match specific characters in tcl

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

"@/$%&*#{}4g_.[]3435_.technology@lte042"

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

代码:

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

我得到了输出:

4g_.3435_.technology

我没有得到剩余的字符"lte042"

请帮忙。

我想您正试图删除所有 non-word 个字符,而不是试图找到第一个连续的单词字符序列。您可以使用重复的 search-and-replace:

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 选项不允许将匹配变量指定为命令参数。

更近一步:

% set s {@/$%&*#{}4g_.[]3435_.technology@lte042}
@/$%&*#{}4g_.[]3435_.technology@lte042
% join [regexp -inline -all {[][\w._-]+} $s] {}
4g_.[]3435_.technologylte042

文档: join, regexp, set, Syntax of Tcl regular expressions