如何在TCL中实现自动正则表达式匹配相似列表?
问题解答
要匹配和列表a结构完全一致(元素数量相同且对应位置元素字符数一致)的列表,必须统计每个元素的字符数,单纯用\S+这类正则表达式无法满足需求,原因如下:
先看你的例子:
- 列表
a的元素字符数分别是:powerball(9位)、gummy3(6位)、slash(5位) - 列表
b的对应元素字符数刚好匹配:notaaball(9位)、gummy2(6位)、slosh(5位) - 列表
c的元素字符数全是7位,和a完全不对应
- 列表
\S+的局限性:
这个正则仅能匹配连续非空白字符组成的元素,无法识别字符长度差异。不管元素是5位、7位还是9位,只要是无空白的字符串都会被\S+匹配,这样会误把列表c也判定为匹配项,因为它同样是三个非空白元素。正确的实现思路:
先提取列表a每个元素的字符长度,生成精准的正则模板。比如针对a的结构,正则可以写成:set \w+ \[list (\S{9}) (\S{6}) (\S{5})\]这个正则会严格匹配“变量名 + [list + 9位非空白元素 + 6位非空白元素 + 5位非空白元素]”的结构,刚好命中列表
b,同时排除列表c。
内容的提问来源于stack exchange,提问作者heyhey
相关产品推荐
相关产品推荐

