regsub 1 space 单词之间到“_”
regsub 1 space between words to "_"
谁能帮忙将单词之间的 1 space 注册为“_”(TCL)?
原行:
CTS__94331/I (DCCKBD8BWP240H11P57PDULVT) 0.025 0.002 & 0.352 r
需求行:
CTS__94331/I_(DCCKBD8BWP240H11P57PDULVT) 0.025 0.002_& 0.352_r
我尝试了下面的方法,但每个 space 都替换为“”,我只想将 1 个 space 替换为“”
regsub -all {\s{1}} $a _
regsub 1 space between words to "_"
对于这种情况,您可以考虑string map
:
% string map {" " "_"} {CTS__94331/I (DCCKBD8BWP240H11P57PDULVT)}
CTS__94331/I_(DCCKBD8BWP240H11P57PDULVT)
但是,您的示例数据不一致,我没有看到要替换多个空格的示例?
您需要在正则表达式中偷偷摸摸并使用不同的替代品。
regsub -all {(\S)\s(?=\S)} $a {_}
正则表达式匹配(并捕获)一个非白色space,后跟一个白色space,然后要求(使用先行约束)下一个字符是非白色space 而不匹配它。这将替换为您匹配的第一个字符(将其替换为自身)和下划线。
通常情况下,您会使用 \y\s\y
→ _
,但这在您的用例中不起作用,因为它无法正确处理 0.002 &
( &
不是单词字符)。
如果 Tcl 的 RE 引擎支持 lookbehind 约束(它不支持),这将更容易解决,因为您不需要将 space 之前的字符替换为自身的技巧。
谁能帮忙将单词之间的 1 space 注册为“_”(TCL)?
原行:
CTS__94331/I (DCCKBD8BWP240H11P57PDULVT) 0.025 0.002 & 0.352 r
需求行:
CTS__94331/I_(DCCKBD8BWP240H11P57PDULVT) 0.025 0.002_& 0.352_r
我尝试了下面的方法,但每个 space 都替换为“”,我只想将 1 个 space 替换为“”
regsub -all {\s{1}} $a _
regsub 1 space between words to "_"
对于这种情况,您可以考虑string map
:
% string map {" " "_"} {CTS__94331/I (DCCKBD8BWP240H11P57PDULVT)}
CTS__94331/I_(DCCKBD8BWP240H11P57PDULVT)
但是,您的示例数据不一致,我没有看到要替换多个空格的示例?
您需要在正则表达式中偷偷摸摸并使用不同的替代品。
regsub -all {(\S)\s(?=\S)} $a {_}
正则表达式匹配(并捕获)一个非白色space,后跟一个白色space,然后要求(使用先行约束)下一个字符是非白色space 而不匹配它。这将替换为您匹配的第一个字符(将其替换为自身)和下划线。
通常情况下,您会使用 \y\s\y
→ _
,但这在您的用例中不起作用,因为它无法正确处理 0.002 &
( &
不是单词字符)。
如果 Tcl 的 RE 引擎支持 lookbehind 约束(它不支持),这将更容易解决,因为您不需要将 space 之前的字符替换为自身的技巧。