问题描述
我是 TCL 的新手,我需要在 TLC 中使用正则表达式来提取所有包含 5 的数字
我拼凑了一个成功的但我不能使用它,因为它lsearch :
set x "55 6 90 5 89 105 7 85 191"
puts [lsearch -all -inline -regexp $x {5} ]
这导致:
55 5 105 85
这是我想要使用正则表达式的地方
这是我能得到的最接近的:
puts [regexp -all -inline {9.+} $x]
我得到了结果:
{90 5 89 105 7 85 191 }
显示不属于那里的额外单词
解决方法
正则表达式 9.+
将匹配字符串中的前 9 个字符和后面的一个或多个字符的最长可能序列,直到字符串结束。 (但是,如果前 9 个是字符串中的最后一个字符,则它不会匹配,因为要求至少有一个后续字符)。如果您只想将字符串中的单个 单词 与其中的 9 匹配,您可以使用 0 个或多个非空白字符的序列来括起文字 9(或 5,或其他):
% regexp -all -inline {\S*9\S*} $x
90 89 191
% regexp -all -inline {\S*5\S*} $x
55 5 105 85
,
如果您只想匹配包含 9 的数字,您可以匹配数字周围的可选数字并使用字边界来防止部分匹配。 .
将匹配任何字符并且会匹配太多。
\m\d*9\d*\M
-
\m
词首的词边界 -
\d*9\d*
在可选数字之间匹配9
-
\M
词尾的词边界
例如
set x "55 6 90 5 89 105 7 85 191"
regexp -all -inline {\m\d*9\d*\M} $x
输出
90 89 191