正则表达式匹配 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
我有一个包含以下字符的变量
"@/$%&*#{}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