在处理TCL regexp时需要指导

在处理TCL regexp时需要指导,regex,tcl,Regex,Tcl,我需要处理一个中间有“.”字符的随机字符串。如下图所示 a..b/c..de/f-g..xyz..abc..def..123.. a、 .b/c..de/f-g..xyz..abc..def..123。。 如何使用regexp获取这些“.”之间的数据?(此字符串可以是任意长度,我需要获取每个中间数据集以进行进一步处理)。请用这个指导我 谢谢 如果字符串中没有换行符,您可以使用以下内容获得字符串列表: set in a..b/c..de/f-g..xyz..abc..def..123.. set

我需要处理一个中间有“.”字符的随机字符串。如下图所示

a..b/c..de/f-g..xyz..abc..def..123.. a、 .b/c..de/f-g..xyz..abc..def..123。。 如何使用regexp获取这些“.”之间的数据?(此字符串可以是任意长度,我需要获取每个中间数据集以进行进一步处理)。请用这个指导我


谢谢

如果字符串中没有换行符,您可以使用以下内容获得字符串列表:

set in a..b/c..de/f-g..xyz..abc..def..123..
set out [split [string map {.. \n} $in] \n]]

您可以使用以下正则表达式:

[^..]

这将匹配所有非
的字符。

>P>一种考虑这类事情的工具,特别是如果分裂项比问题中的一个更复杂的话。可以通过正则表达式拆分字符串,如下所示:

package require textutil::split

set sample "a..b/c..de/f-g..xyz..abc..def..123.."
set RE {\.\.};  # “.” is an RE metacharacter, and so needs to be escaped
set pieces [textutil::split::splitx $sample $RE]

由于有终止分隔符,
a
b/c
de/f-g
xyz
abc
def
123
,上述操作也会在
片段列表的末尾产生一个空元素,我需要这些数据,但字符串长度未知。我认为此命令可能会在字符串的开头查找“.”并保留其余部分。我试过了,但没有得到所需的结果。@Nathan:实际上,这是一个名为
^..
的命令。或者-更相关的-一个正则表达式,它匹配除
之外的任何内容(因为括号中包含一个字符集)。@NathanPk当我在
上测试这个时http://regexhero.net/tester/
它抓取了所有不是
的东西。
映射到/拆分的好字符是
\ufffc
(“对象替换字符”),因为在任何实际文本中都不太可能遇到这些字符之一。正则表达式也可以是
\.{2}
,但这并不简单,也可以是
***=..
(前导的
***=
是一种特殊的Tcl重新引擎功能,用于“将其余字符作为文本进行匹配”)。