gpt4 book ai didi

lua - 模式匹配删除新行字符

转载 作者:行者123 更新时间:2023-12-01 15:28:34 26 4
gpt4 key购买 nike

如何从 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]-).*"不起作用。

最佳答案

你的模式

p = "(.-);(.-);(.-)";

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

p = "(.-);(.-);(.-)$";

因此,只需在第一个尾随换行符处停止。这也锚定了最后一场比赛。试试这个模式:

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

如果尾随换行符是可选的,试试这个模式:

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

关于lua - 模式匹配删除新行字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24756959/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com