【问题标题】:split a string and print only numbers from an alphanumeric string拆分字符串并仅打印字母数字字符串中的数字
【发布时间】:2021-11-15 16:47:08
【问题描述】:

我是 Tcl 的新手。我有一个特定的字符串“code_lines_part2021vol32i8mn.txt”,我只想打印格式为“2021 32 8”的数字我该怎么做?

提前致谢

【问题讨论】:

    标签: string split tcl


    【解决方案1】:

    我没有旧的 Tcl 可以测试,但试试这个:

    set numbers [regexp -all -inline {\d+} $string]
    puts [join $numbers]
    

    【讨论】:

    • 你不需要那个join;非空数字序列总是好词。
    • 好吧,我已经训练自己知道列表是列表,字符串是字符串,两者永远不会相遇。
    【解决方案2】:

    你可以试试这个...想法是用regsub command删除除数字以外的所有字符并用空格替换:

    set your_string "code_lines_part2021vol32i8mn.txt"
    regsub -all -nocase {[._a-z]} $your_string { } newstring
    lassign $newstring num_1 num_2 num_3
    puts "result = $num_1 $num_2 $num_3"
    # result = 2021 32 8
    

    使用regexp command 可能会更容易,但我还没有弄清楚。
    文档:regsublassignregexp(如果你想试试)

    【讨论】:

    • 感谢@Mkn 的回答,但我使用的是Tcl 8.4 版,lassign 似乎无法解决。它给出错误“无效的命令名称:lassign”还有其他方法吗?由于共享库,我无法更新 Tcl 版本。
    • @sing20 你可以改用foreach {num_1 num_2 num_3} $newstring {}
    • 非常感谢。两种方法都对我有用!
    猜你喜欢
    • 2013-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-20
    • 2020-02-14
    相关资源
    最近更新 更多