如何從類似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 =「(.-);(.-);(.-)%c * $」;所以它也適用於沒有換行字符的情況。謝謝。 –
@JavierMr,看我編輯的答案。 – lhf