Lua 模式匹配删除新行字符

Lua 模式匹配删除新行字符,lua,lua-patterns,Lua,Lua Patterns,如何从类似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);

如何从类似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经验,我找到了一个简单的解决方案:

clean_CR = s:gsub("\r","");
clean_NL = clean_CR:gsub("\n","");
我会使用POSIX正则表达式语法

^([^;]*);([^;]*);([^\n\r]*).*$
。。其中“\n”和“\r”可能包含为“^M”、“^@”(控制/unicode字符)。。取决于您的编辑器。

您的模式

p=“(.-);(.-);(.-)”

不起作用:第三个字段始终为空,因为
-
尽可能匹配一点。您需要将其锚定在字符串的末尾,但第三个字段将包含尾随的换行符:

p=“(.-);(.-);(.-)$”

因此,只需在第一个尾随换行字符处停止。这也是最后一场比赛的主播。请尝试以下模式:

p=“(.-);(.-);(.-)[\r\n]”

如果尾部换行符是可选的,请尝试以下模式:

p=“(.-);(.-);(.-)[\r\n]*$”


是的,我弄乱了图案。根据您的模式,我将其修改为'p=“(.-);(.-);(.-)%c*$”;因此,如果没有新行字符,它也可以工作。谢谢。如果你这样做的话,做
s=s:gsub(“[\r\n]+”,”)
就简单多了。虽然会有一条更短的路,但我不知道lua对你的评论投了更高的评价!