TCL regexp惰性修饰符失效:如何提取字符串中的'D1P5'
TCL regexp 提取指定内容的问题解决
原命令的问题在于正则表达式里的\S会匹配包括下划线在内的所有非空白字符,即便用了非贪婪模式+?,也会因为\S包含下划线,导致匹配范围超出预期的_边界。
修正后的正则表达式可以把\S替换为[^_](匹配除下划线外的任意非空白字符),这样就能精准匹配两个_之间的内容:
regexp {\S+_(D[^_]+)_} "abc_D1P5_efg_hij_k" dmy var puts $var
执行后会得到预期输出:
D1P5
另外,也可以用更简洁的正则直接定位两个_之间的目标内容,避免前面的\S+可能带来的潜在问题:
regexp {_(D[^_]+)_} "abc_D1P5_efg_hij_k" dmy var
这个正则会直接匹配第一个_后、下一个_前的D开头内容,结果一致。
内容的提问来源于stack exchange,提问作者Gert Gottschalk
相关产品推荐
相关产品推荐

