如何使用Tcl regexp提取包含‘house’的HTML整行内容?
如何用Tcl的regexp提取包含特定单词的整行内容?
你的问题核心是之前的正则只匹配了目标单词本身,没有捕获整个行。咱们来调整一下正则表达式和参数,就能拿到包含house的整行内容了。
问题分析
你之前的代码:
set grepfw "house" set fwversion [regexp -inline "$grepfw" $res] puts $fwversion
只返回house是因为正则仅指定了目标单词,-inline只会返回匹配到的这个单词;去掉-inline返回1是因为Tcl的regexp默认返回匹配成功(1)或失败(0)的状态,而非匹配内容。
解决方案
要捕获包含house的整行,需要让正则匹配从行首到行尾、中间包含目标单词的内容,同时用-all参数获取所有符合条件的行(如果有多行的话)。
示例代码:
set grepfw "house" # 匹配包含house的整行,-all捕获所有匹配行,-inline返回匹配内容 set matching_lines [regexp -inline -all ".*$grepfw.*" $res] # 遍历输出每一行匹配结果 foreach line $matching_lines { puts $line }
细节说明
.*$grepfw.*:Tcl默认下.不匹配换行符,所以.*会匹配当前行内的任意字符(从行首到目标单词前,以及目标单词到行尾),整体就能匹配到包含house的整行。-all:如果HTML文档中有多行包含house,这个参数会把所有匹配的行都返回,否则只会返回第一行。- 若需要忽略大小写匹配(比如匹配
House、HOUSE),可以加上-nocase参数:set matching_lines [regexp -inline -all -nocase ".*$grepfw.*" $res]
内容的提问来源于stack exchange,提问作者user1348067
相关产品推荐
相关产品推荐

