【发布时间】:2014-07-15 11:25:07
【问题描述】:
如何从类似 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]-) .*" 不起作用。
【问题讨论】:
标签: lua lua-patterns