Как извлечь значения из CSV-подобной строки, отбрасывая символы новой строки (\r\n
или \n
) с шаблоном.
Строка выглядит так:
1.1;2.2;Example, 3
Обратите внимание, что есть только 3 значения и разделитель ;
. Проблема, с которой я столкнулся, состоит в том, чтобы придумать шаблон, который считывает значения при удалении символов новой строки (файл поступает с компьютера с Windows, поэтому он имеет \r\n, читает его из Linux и хотел бы быть независимым от используемого символа новой строки).
Мой простой пример прямо сейчас:
s = "1.1;2.2;Example, 3\r\n";
p = "(.-);(.-);(.-)";
a, b, c = string.match(s, p);
print(c:byte(1, -1));
Два последних символа, напечатанные вышеприведенным кодом, — это \r\n
.
Проблема в том, что оба, \r
и \n
, обнаруживаются классами %c и %s (управляющие символы и символы пробела), как показано в этом коде:
s = "a\r";
print(s:match("%c"));
print(s:match("%s"));
print(s:match("%d"));
Итак, можно ли исключить из совпадения символы новой строки? (Не следует предполагать, что последние два символа будут символами новой строки)
Значение 3º может содержать пробелы, знаки препинания и буквенно-цифровые символы, а поскольку \r\n
определяются как пробелы, шаблон типа `"(.-);(.-);([%w%s%c]-).*" не работай.