【问题标题】:extract data from string in lua - SubStrings and Numbers从 lua 中的字符串中提取数据 - 子字符串和数字
【发布时间】:2018-05-21 18:47:44
【问题描述】:

我正在尝试为一个爱好项目编写一个字符串,我是从这个站点的代码片段中自学的,并且很难解决这个问题。希望大家帮忙。

我有一个大字符串,包含很多行,每一行都有一定的格式。

我可以使用此代码获取字符串中的每一行...

for line in string.gmatch(deckData,'[^\r\n]+') do
    print(line) end

每一行看起来都像这样......

3x Rivendell Minstrel(寻找咕噜)

我要做的是为上面的行制作一个看起来像这样的表格。

table = {}
  table['The Hunt for Gollum'].card = 'Rivendell Minstrel'
  table['The Hunt for Gollum'].count = 3

所以我的想法是提取括号内的所有内容,然后提取数字值。然后删除该行中的前 4 个字符,因为它始终是 '1x'、'2x' 或 '3x'

我已经尝试了很多东西......像这样......

word=str:match("%((%a+)%)")

但是如果有空格就会出错...

我的测试代码现在看起来像这样......

line = '3x  Rivendell Minstrel (The Hunt for Gollum)'
    num = line:gsub('%D+', '')
    print(num) -- Prints "3"

card2Fetch = string.sub(line, 5)
    print(card2Fetch) -- Prints "Rivendell Minstrel (The Hunt for Gollum)"

key = string.gsub(card2Fetch, "%s+", "") -- Remove all Spaces
    key=key:match("%((%a+)%)") -- Fetch between ()s
    print(key) -- Prints "TheHuntforGollum"

任何想法如何从那里获取“寻找咕噜”文本,包括空格?

【问题讨论】:

    标签: lua


    【解决方案1】:

    尝试使用单一模式捕获所有字段:

    x,y,z=line:match("(%d+)x%s+(.-)%s+%((.*)%)")
    t = {}
    t[z] = {}
    t[z].card = y
    t[z].count = x
    

    模式如下:捕获x 之前的一系列数字,跳过空格,捕获所有内容,直到空格后跟左括号,最后捕获所有内容,直到右括号。

    【讨论】:

    • 感谢您,这段代码运行良好,如果字符串与格式不匹配,它会返回 nil。因此,一个简单的 nil 测试可以删除文本文件中的垃圾数据,我们只会得到好东西 GREAT.. 你不会碰巧知道如何修改代码来抓取没有数字的行......就像“Frodo Baggins (Conflict at the Carrock)”一样,这些行也返回 nil 错误。但我也需要它们。
    • @aJynks,如果第一个失败,请尝试另一个匹配:y,z=line:match("^%s*(.-)%s+%((.*)%)")
    猜你喜欢
    • 1970-01-01
    • 2015-05-31
    • 1970-01-01
    • 1970-01-01
    • 2011-07-21
    • 1970-01-01
    • 2020-06-10
    • 2022-10-16
    相关资源
    最近更新 更多