如何删除单个 letter/number
How to remove a single letter/number
我想删除变量中的单个字母和数字
示例输入:
USA-2019-1-aoiwer
USA-A-jowerasf
BB-a_owierlasdf-2019
flsfwer_5_2015-asfdlwer
期望的输出:
USA-2019--aoiwer
USA--jowerasf
BB-_owierlasdf-2019
flsfwer__2015-asfdlwer
我的代码:
bind pub "-|-" !aa proc:aa
proc proc:aa { nick host handle channel arg } {
set line [lindex $arg 0]
set line [string map {[a-z] """} $line]
set line [string map {[0-9] """} $line]
putnow "PRIVMSG $channel :$line"
}
不幸的是,这不起作用,我没有其他想法
此致
string map
将删除所有小写字母和数字(如果有效)。但是,您也有不平衡的引号,这会在 proc 解析时导致语法错误。
我建议使用 regsub
。然而,困难的部分是获得正确的表达方式来完成任务。我会提出以下建议:
bind pub "-|-" !aa proc:aa
proc proc:aa { nick host handle channel arg } {
set line [lindex $arg 0]
regsub -nocase -all {([^a-z0-9]|\y)[a-z0-9]([^a-z0-9]|\y)} $line {} line
putnow "PRIVMSG $channel :$line"
}
基本上([^a-z0-9]|\y)
匹配一个非字母数字的字符,或一个单词边界(例如,如果可以的话,它将匹配一个句子的开头,或者一个句子的结尾),并存储它(这是parens的目的)。
匹配的组是按照从1开始的顺序存储的,所以在regsub
的替换部分,我把不应该替换的部分放回原处。
以上应该没问题。
从技术上讲,你可以用稍微不同的表达方式变得更漂亮:
regsub -nocase -all {([^a-z0-9]|\y)[a-z0-9](?![a-z0-9])} $line {} line
它使用负前瞻 ((?! ... )
)。
无论如何,如果您想更深入地了解,我建议您阅读 manual 正则表达式语法
我想删除变量中的单个字母和数字
示例输入:
USA-2019-1-aoiwer
USA-A-jowerasf
BB-a_owierlasdf-2019
flsfwer_5_2015-asfdlwer
期望的输出:
USA-2019--aoiwer
USA--jowerasf
BB-_owierlasdf-2019
flsfwer__2015-asfdlwer
我的代码:
bind pub "-|-" !aa proc:aa
proc proc:aa { nick host handle channel arg } {
set line [lindex $arg 0]
set line [string map {[a-z] """} $line]
set line [string map {[0-9] """} $line]
putnow "PRIVMSG $channel :$line"
}
不幸的是,这不起作用,我没有其他想法
此致
string map
将删除所有小写字母和数字(如果有效)。但是,您也有不平衡的引号,这会在 proc 解析时导致语法错误。
我建议使用 regsub
。然而,困难的部分是获得正确的表达方式来完成任务。我会提出以下建议:
bind pub "-|-" !aa proc:aa
proc proc:aa { nick host handle channel arg } {
set line [lindex $arg 0]
regsub -nocase -all {([^a-z0-9]|\y)[a-z0-9]([^a-z0-9]|\y)} $line {} line
putnow "PRIVMSG $channel :$line"
}
基本上([^a-z0-9]|\y)
匹配一个非字母数字的字符,或一个单词边界(例如,如果可以的话,它将匹配一个句子的开头,或者一个句子的结尾),并存储它(这是parens的目的)。
匹配的组是按照从1开始的顺序存储的,所以在regsub
的替换部分,我把不应该替换的部分放回原处。
以上应该没问题。
从技术上讲,你可以用稍微不同的表达方式变得更漂亮:
regsub -nocase -all {([^a-z0-9]|\y)[a-z0-9](?![a-z0-9])} $line {} line
它使用负前瞻 ((?! ... )
)。
无论如何,如果您想更深入地了解,我建议您阅读 manual 正则表达式语法