正则表达式 TCL 无法获取包含字符的整个单词
Regexp TCL unable to get entire word containing character
我是 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 个字符是字符串中的最后一个字符,则不会匹配,因为要求至少有一个后续字符)。如果您只想匹配字符串中的单个 words 和其中的 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
我是 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 个字符是字符串中的最后一个字符,则不会匹配,因为要求至少有一个后续字符)。如果您只想匹配字符串中的单个 words 和其中的 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