Нужно регулярное выражение для анализа этой строки 58.21 -13.73 57 -1 - PullRequest
0 голосов
/ 19 января 2011

Нужна помощь в разборе чисел из этой строки в Lua.

58.21 -13.73 57 -1

В настоящее время я нахожусь на этом: [1-9][0-9], что я знаю, не является правильным, поскольку он не возвращает минус и не обрабатываетдесятичный.

Спасибо,

Дейв

Ответы [ 4 ]

2 голосов
/ 19 января 2011
s="58.21 -13.73 57 -1"
for w in s:gmatch("%S+") do print(w) end

Этот шаблон извлекает все слова из строки, причем слово представляет собой набор непробельных символов.

0 голосов
/ 19 января 2011

В Луа:

(%-?%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

Вы можете (или не можете) преобразовывать возвращаемые значения в числа.

0 голосов
/ 19 января 2011

Я предполагаю, что под словом "синтаксический анализ" вы подразумеваете регулярное выражение, которое будет соответствовать числу.В предоставленной вами строке вы бы хотели, чтобы совпадения были:

  • 58.21
  • -13.73
  • 57
  • -1

Шаблон, который я, вероятно, использовал бы, - ([^ ]+).Он найдет все, кроме пробела, который в вашей строке будет числа с (потенциально) десятичными точками и знаками.

0 голосов
/ 19 января 2011

Это не работа для регулярных выражений.Вот простая реализация в python:

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

Принцип, однако, универсален: разбить на пробел и преобразовать в числовой тип при необходимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...