在处理TCL正则表达式时需要指导

时间:2012-10-24 19:18:22

标签: regex tcl

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

a..b/c..de/f-g..xyz..abc..def..123..

如何使用regexp获取这些“..”之间的数据?(此字符串可以是任意长度,我需要获取每个中间数据集以进行进一步处理)。请指导我。

谢谢!

3 个答案:

答案 0 :(得分:6)

如果有p.e.字符串中没有换行符,您可以通过以下方式获取字符串列表:

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

答案 1 :(得分:1)

要考虑这种事情的一个工具,特别是如果分裂术语比问题中的术语更复杂,则the textutil::split package in Tcllib。这允许您通过正则表达式拆分字符串,如下所示:

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]

以上内容还会在pieces列表的末尾生成一个空元素,因为它有一个终止分隔符。

答案 2 :(得分:0)

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

[^..]

这将匹配所有不是..的字符。