首先,您使用的正则表达式首先并没有做正确的事情,因为[^country]
匹配一组字符,该字符集由除 in 之外的所有字母组成country
(因此它仅从h
ineth1
开始匹配,因为需要country
然后)。
默认情况下,Tcl 使用整个字符串来匹配,换行符只是普通字符。(还有一个选项可以通过指定 来使它们变得特别-line
,但默认情况下它不是打开的。)这意味着如果我使用你的整个字符串并regexp
用你的正则表达式输入它,它就可以工作(好吧,你可能想要string trim $country_value
在某些观点)。这意味着您真正的问题在于提供要匹配的正确字符串。
如果您一次显示一行(可能是从文件中读取),并且您想对一行使用匹配来触发下一行的处理,则需要在正则表达式匹配之外进行一些处理:
set found_country 0
while {[gets $channel line] >= 0} {
if {$found_country} {
# Process the data...
puts "post-country data is $line"
# Reset the flag
set found_country 0
} elseif {[regexp {(.*) country$} $line -> leading_bits]} {
# Process some leading data...
puts "pre-country data is $leading_bits"
# Set the flag to handle the next line specially
set found_country 1
}
}
如果您想完全跳过空白行,if {$line eq ""} continue
请在if {$found_country} ...
.