【问题标题】:How to start a string at a certain character and end it at a certain character? (Lua)如何以某个字符开始字符串并以某个字符结束? (卢阿)
【发布时间】:2019-11-28 07:44:12
【问题描述】:

这是我的问题。我正在使用 Lua,我有一个看起来像这样的字符串:

“开始1.2.3.4.5-1.2.3.4.5-1.2.3.4.5-1.2.3.4 .5-1.2.3.4.5结束”

每个连字符之间的五个数字都与同一个“对象”配对,但每个数字代表一组单独的数据。数字之间的句点分隔数据。

所以在 Start 之后,1 = 我们的第一个值,2 = 我们的第二个值,3 = 我们的第三个值,4 = 我们的第四个值,5 = 我们的第五个值。这 5 个值存储到同一个对象中。然后我们点击分隔“对象”的第一个连字符。所以每个对象有 5 个对象和 5 个值。

我以 1.2.3.4.5 为例,但这些数字将随机化为最多 4 位数字。所以它可以说类似 Start12.3.100.1025.50- 等...

希望这是有道理的。这是我到目前为止所做的:

MyString = 我在上面发布的长字符串

local extracted = string.match(MyString, "Start(.*)")

这将返回字符串中除 Start 之外的所有内容。但是,我希望它在 Start 之后返回所有内容,然后在到达下一个连字符时切断。然后从那时起,我将重复该过程,但会查找连字符之间的所有内容,直到我到达 End。我还需要过滤掉句点。此外,连字符/句号可以更改为其他内容,只要它们不是数字即可。

关于如何做到这一点的任何想法?

【问题讨论】:

    标签: string lua


    【解决方案1】:

    只需使用捕获包含数字和句点的任何内容的模式。

    "([%d%.]+)" 请注意,您必须使用 % 转义句点,因为它是一个魔术字符。

    local text = "Start1.2.3.4.5-1.2.3.4.5-1.2.3.4.5-1.2.3.4.5-1.2.3.4.5End"
    
    for set in text:gmatch("([%d%.]+)") do
     print(set)
     local numbers = {}
     for num in set:gmatch("%d+") do
       table.insert(numbers, num)
     end
     print(table.unpack(numbers))
    end
    

    打印:

    1.2.3.4.5
    1   2   3   4   5
    1.2.3.4.5
    1   2   3   4   5
    1.2.3.4.5
    1   2   3   4   5
    1.2.3.4.5
    1   2   3   4   5
    1.2.3.4.5
    1   2   3   4   5
    

    【讨论】:

    • 如果句号之间的数字超过一位,这会起作用吗?这也是他问题的一个方面。
    • @Corsaka + 匹配一个或多个。但即使不是,我也不认为为自己的脑力留出一些空间是件坏事。请记住,这不是编码服务。
    猜你喜欢
    • 2014-12-02
    • 1970-01-01
    • 1970-01-01
    • 2015-08-30
    • 1970-01-01
    • 1970-01-01
    • 2021-11-22
    • 2017-12-08
    • 2011-04-12
    相关资源
    最近更新 更多