当使用数字和字符串作为模式时,tcl中的Regex不匹配我的模式

eimct9ow  于 2023-05-19  发布在  其他
关注(0)|答案(1)|浏览(299)

我有一个正则表达式,我正在使用它,我试图匹配python中的表达式,但我是tcl的新手,似乎不能让正则表达式工作。

set string"abc08_batman"
set patternOne "abc.*Batman"
set patternTwo "abc\d+.*Batman"
set patternThree "abc\d{2}.*Batman"

if {[regexp -nocase $pattern $string c]} {
   puts "Full Match 2: $c"
}

patternOne工作,但不够好,patternTwo是我更喜欢的,但他们不工作。
下面的工作,但我不能硬编码08,因为这违背了使用正则表达式的目的。我现在被锁定到abc08

if {[regexp -nocase "abc08.*batman" $string c]} {
    puts "Full Match: $c"
}
siv3szwd

siv3szwd1#

您需要将反斜杠加倍,以防止它被引号扩展所吞噬。

set patternTwo "abc\\d+.*Batman"

如果没有它,变量的内容是abcd+.*Batman,这并不奇怪为什么它不匹配。
更好的是,使用大括号来避免在其中进行任何扩展或求值:

set patternThree {abc\d{2}.*Batman}

您需要重新理解the Tcl syntax rules,尤其是规则4、6和9。

相关问题