我知道了,現在我有兩個問題。但我很開心!用java中的RegEx解析CSV輸入
我從this advice開始不嘗試分割,而是匹配什麼是可接受的字段,並從那裏擴展到這個表達式。
final Pattern pattern = Pattern.compile("\"([^\"]*)\"|(?<=,|^)([^,]*)(?=,|$)");
表達看起來像這樣沒有惱人的轉義引號:
"([^"]*)"|(?<=,|^)([^,]*)(?=,|$)
這是工作很適合我 - 無論它符合「兩個報價,無論是他們之間的」或「之間的東西該行的開頭或逗號以及該行的末尾或逗號「。迭代通過比賽可以讓我看到所有的場地,即使它們是空的。例如,
the quick, "brown, fox jumps", over, "the",,"lazy dog"
分解成
the quick
"brown, fox jumps"
over
"the"
"lazy dog"
太好了!現在我想放棄引號,所以我添加了前面和後面的非捕獲組,就像我爲逗號所做的那樣。
final Pattern pattern = Pattern.compile("(?<=\")([^\"]*)(?=\")|(?<=,|^)([^,]*)(?=,|$)");
再次表達的是:
(?<=")([^"]*)(?=")|(?<=,|^)([^,]*)(?=,|$)
而是期望的結果
the quick
brown, fox jumps
over
the
lazy dog
現在我得到這樣的故障:
the quick
"brown
fox jumps"
,over,
"the"
,,
"lazy dog"
我缺少什麼?
我假設你的文本本身不能包含引號? – 2009-09-18 10:28:53
謝天謝地沒有。那時我只會使用openCSV庫。 – 2009-10-12 18:11:32
其他用於Java的CSV庫:http://stackoverflow.com/questions/101100/csv-api-for-java – Thilo 2013-08-02 12:42:30