【问题标题】:tcl regexp match a string of digits based on index of the stringtcl regexp 根据字符串的索引匹配一串数字
【发布时间】:2014-07-17 16:46:11
【问题描述】:

我需要一点帮助。我试图想出一个正则表达式来匹配一串数字。我希望字符串从我拥有的字符串的位置值开始匹配。

这是我的字符串

01102000000000001A40000000200000000000100012064000100000000000000

我希望正则表达式从字符串的第 20 个值开始匹配,或者直接在 A4 之后进行匹配。此外,我想匹配字符串第 20 个值之后的第一个 10 位数字。我已经尝试了一些它们并没有真正起作用的东西。想看看我能不能在这里得到一些想法。

【问题讨论】:

  • 如果您只想要位置 20 的 10 个字符,为什么还要使用正则表达式? TCL 似乎支持 string.range 来做到这一点...
  • 其实我已经试过字符串范围了。显然,这是一个巨大的字符 lindex 匹配 0 01102000000000001A40000000200000000000100012064000100000000000000 如果你看到 lindex 值 0 是整个字符串。我需要找到一种方法来打破断线。这就是为什么我认为在这里使用正则表达式可能更容易。
  • @Matt:lindex 命令用于从列表中获取元素。查找 string 命令,特别是 string range,它会执行您想要完成的操作。

标签: regex tcl


【解决方案1】:

如果 TessellatingHeckler 的答案中的链接过时,我将使用实际代码添加另一个答案。这个问题至少有三种解决方案(假设要搜索的字符串在变量s中):

TessellatingHeckler 的解决方案:

lindex [regexp -inline {.{19}(\d{10})} $s] 1

另一个regexp解决方案:

regexp -inline -start 19 {\d{10}} $s

string range 解决方案:

string range $s 19 19+9

文档:lindexregexpstring

【讨论】:

    【解决方案2】:

    将前 19 个字符匹配到 A4 并将它们丢弃的正则表达式,然后将其后的 10 个数字捕获到一个组中:

    .{19}(\d{10})
    

    http://regex101.com/r/cO9bE7/1

    (我不知道它是否与 TCL 兼容)。

    【讨论】:

    • 如果我不能以其他方式做到这一点,我将尝试这种可能性。我不确定 TCL 正则表达式是否支持匹配位置值以及之后的范围。但是你的建议也是我考虑过的。也感谢您的建议。
    • 您好 刚试过,它与 TCL 兼容,感谢您的帮助。我真的很感激。
    • 这是一个仅链接的答案,因此应该作为评论而不是实际答案发布。请确保人们可以单独使用我们的答案,而无需任何解决方案链接,并且仅将链接用于额外信息。
    猜你喜欢
    • 2017-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-02
    相关资源
    最近更新 更多