【问题标题】:TCL I want to find a regex pattern to match only integersTCL 我想找到一个只匹配整数的正则表达式模式
【发布时间】:2021-10-22 06:10:43
【问题描述】:

我正在使用

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

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

我正在寻找任何等价物。

【问题讨论】:

  • 你能提供一些输入输出的例子吗?
  • 这个正则表达式 (?
  • 如果你使用 tcl,为什么这个标签是 JavaScript?
  • 如果你想匹配整数(只包含数字的字符串),为什么不简单地使用^\d+$
  • 它将匹配浮点数的分数

标签: javascript regex tcl regex-lookarounds


【解决方案1】:

Tcl 正则表达式不支持lookbehinds,尽管它支持lookaheads。

你可以使用类似的东西

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) - 如果存在可选的 . 和紧邻当前位置右侧的数字,则匹配失败。

【讨论】:

    【解决方案2】:

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

    % 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 用于 bigint。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-27
      • 1970-01-01
      • 2016-08-30
      相关资源
      最近更新 更多