Regex TCL-使用正则表达式获取另一个字符串中由空格分隔的字符串列表

Regex TCL-使用正则表达式获取另一个字符串中由空格分隔的字符串列表,regex,tcl,Regex,Tcl,如何在TCL中编写匹配单词和空格的regexp。比如我有 aaaa bbbb cccc 我想匹配“AAAA”,“bbbb”,“cccc”。 另外,请告诉我什么是空白和非空白的正则表达式符号。我到处都找不到 谢谢。空格的正则表达式符号是“”。Like[a-z.]给你一个空格,句号和小写字母。我的想法是只搜索单词字符的分组: set text {aaaa bbbb cccc} regexp -all -inline {\S+} $text > aaaa bbbb c

如何在TCL中编写匹配单词和空格的regexp。比如我有

aaaa    bbbb    cccc       
我想匹配“AAAA”,“bbbb”,“cccc”。 另外,请告诉我什么是空白和非空白的正则表达式符号。我到处都找不到


谢谢。

空格的正则表达式符号是“”。Like[a-z.]给你一个空格,句号和小写字母。

我的想法是只搜索单词字符的分组:

set text {aaaa bbbb cccc}
regexp -all -inline {\S+} $text
> aaaa bbbb cccc
您可以在

上找到Tcl正则表达式语法的writeup,我不太确定您到底想要什么,但下面是一个示例:

set str "aaaa    bbbb    cccc       "
regexp {(\S+)\s+(\S+)\s+(\S+)} $str -> wordA wordB wordC
puts "The first is \"$wordA\", second \"$wordB\", and third \"$wordC\""
这将产生以下输出:

第一个是“aaaa”,第二个是“bbbb”,第三个是“cccc”


在RE中,
\S+
表示非空白字符的非空序列,
\S+
表示空白字符的非空序列。我可以分别使用
\w+
(“单词”字符)和
\w+
(“非单词”字符)。重新环绕捕获组中的括号;Tcl不需要REs来匹配整个输入字符串。

据我所知,空格字符将只匹配空格字符。如果要匹配所有空格,则需要使用实际字符类来匹配(\s或[[:space:]])。空格和空格是两种不同的东西。一个空间就是一个空间。“空白”是指在单词之间产生空格的几个字符,通常包括制表符和换行符。具体而言,
\S
是非空白字符,而不仅仅是“单词”字符。注意,regexp命令的返回值是匹配单词的列表,而不是原始字符串(尽管它们看起来似乎相同)@格伦——在我的脑海中,为了这个问题的目的,“顺序非空白”被认为是“单词”,这是一个正确的观点。在返回值上有一个很好的点。我没有想到它返回3个不同的值是不明显的。如果单词是1000,你会怎么做?我的意思是不能使用regexp{(\S+)\S+(\S+)\S+(\S+)},因为它只适用于3。那个么,什么样的解决方案可以应用于通用数字呢?@Narek:对于一百个字,我会使用RHSeeger的解决方案。对于几千人来说,我会开始问我是否应该使用一种一次处理一点事情的解决方案(我也可能会考虑使用更复杂的解析器)。一千美元,我不确定。:-)