需要一个正则表达式来解析该行数据:58.21 -13.73 57 -1。

需要在 Lua 中从此行中解析数字。

58.21 -13.73 57 -1

我目前的做法是:[1-9][0-9],但我知道它不正确,因为它无法返回负数并且无法处理小数。

谢谢,

Dave

原文链接 https://stackoverflow.com/questions/4735163

点赞
stackoverflow用户12855
stackoverflow用户12855

这不适合用正则表达式完成。下面是一个简单的 Python 实现:

>>> s = '58.21 -13.73 57 -1'
>>> [float(i) for i in s.split()]
[58.21, -13.73, 57.0, -1.0]

然而,其原则是普适的:以空格为分隔符并根据需要将其转换为数字类型。

2011-01-19 12:28:12
stackoverflow用户6236
stackoverflow用户6236

在Lua中:

(%-?%d+%.?%d+)\s+(%-?%d+%.?%d+)\s+(%-?%d+%.?%d+)\s+(%-?%d+%.?%d+)

示例:

local a, b, c, d = ("58.21 -13.73 57 -1"):match(
    "(%-?%d+%.?%d*)%s+(%-?%d+%.?%d*)%s+(%-?%d+%.?%d*)%s+(%-?%d+%.?%d*)"
  )
print(a, b, c, d) --> 58.21 -13.73  57  -1

您可能(或可能不)想将返回的值转换为数字。

2011-01-19 13:19:11
stackoverflow用户581528
stackoverflow用户581528

我认为你的“解析”是指,你想要一个正则表达式来匹配一个数值。在你提供的字符串中,你需要匹配的是:

  • 58.21
  • -13.73
  • 57
  • -1

我会使用的模式是 ([^ ]+)。它会找到除空格之外的任何内容,在你的字符串中也就是带有(可能的)小数点和符号的数值。

2011-01-19 14:08:12
stackoverflow用户107090
stackoverflow用户107090
s="58.21 -13.73 57 -1"
for w in s:gmatch("%S+") do print(w) end

这个模式从一行中提取所有的单词,单词是非空白字符的一串。

2011-01-19 15:32:10