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。
我正在使用
(?<![\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。