TCL 我想找到一个只匹配整数的正则表达式模式

TCL I want to find a regex pattern to match only integers

我正在使用

(?<![\d.])[0-9]+(?![\d.])

这对我有用,但我不能使用它,因为它说 “无法编译正则表达式模式:执行时量词操作数无效”

我正在寻找任何等价物。

Tcl 正则表达式不支持回顾,尽管它支持先行。

你可以使用像

这样的东西
set data {12  3.45 1.665 345}
set RE {(?:^|[^0-9.])(\d+)(?!\.?\d)}
set matches [regexp -all -inline -- $RE $data]
foreach {- group1} $matches {
   puts "$group1"
}

输出:

12
345

online demo(?:^|[^0-9.])(\d+)(?!\.?\d) 正则表达式匹配

  • (?:^|[^0-9.]) - 字符串或除数字和点以外的字符的开头
  • (\d+) - 第 1 组:一个或多个数字
  • (?!\.?\d) - 如果有一个可选的 .,然后是当前位置右侧的一个数字,则匹配失败的否定前瞻。

如果整数是单独的单词并且没有被其他字符包围,则不需要正则表达式来获取它们并删除非整数:

% set data {12  3.45 1.665 345}
12  3.45 1.665 345
% set ints [lmap w $data { if {[string is integer $w]} { set w } else { continue } }]
12 345

或者只是 string is integer $whatever 如果你想检查一个变量是否只包含一个整数。还有 wideint 用于 64 位整数和 entier 用于 bigints。