2015-05-29 33 views
0

我解析文件,其中使用Talend具有以下類型的行,我嘗試過使用tFileInputDelimted組件解析它,但文本更接近「'」不起作用。如何將字符串拆分爲java中的列

1, 0, 1, 73, 0, 'root.1', 'Root Asset', '{"site":{"6":1,"2":1},"core":{"6":1}}' 

我需要以下格式的輸出。

1 
0 
1 
73 
0 
root.1 
Root Asset 
{"site":{"6":1,"2":1},"core":{"6":1}} 

編輯:樣品排

`90, 'Loader Menu', '', '<div class="arrowlistmenu">\r\n<h3 class="menuheader"><a href="index.php/component/ordersoncalendar">View Orders</a></h3>\r\n<div class="shrink_div"> </div>\r\n<h3 class="menuheader"><a href="index.php/component/reportmaster/?task=report_details">Time Sheets</a></h3>\r\n<div class="shrink_div"> </div>\r\n<h3 class="menuheader"><a href="index.php/component/availabilitycalendar?task=availability">Update Availability</a></h3>\r\n<div class="shrink_div"> </div>\r\n<h3 class="menuheader"><a href="index.php/component/workers?task=update_personal_info">Update Personal Information</a></h3>\r\n<div class="shrink_div"> </div>\r\n<h3 class="menuheader"><strong><a href="index.php/component/workers?task=ask_password_change">Change Password</a></strong></h3>\r\n<div class="shrink_div"> </div>\r\n</div>', 1, 'loader-menu-position', 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, 'mod_custom', 2, 1, '{"prepare_content":"1","backgroundimage":"","layout":"_:default","moduleclass_sfx":"","cache":"1","cache_time":"900","cachemode":"static"}', 0, '*'` 

和輸出預計該行。

90 'Loader Menu' '' '<div class="arrowlistmenu">\r\n<h3 class="menuheader"><a href="index.php/component/ordersoncalendar">View Orders</a></h3>\r\n<div class="shrink_div"> </div>\r\n<h3 class="menuheader"><a href="index.php/component/reportmaster/?task=report_details">Time Sheets</a></h3>\r\n<div class="shrink_div"> </div>\r\n<h3 class="menuheader"><a href="index.php/component/availabilitycalendar?task=availability">Update Availability</a></h3>\r\n<div class="shrink_div"> </div>\r\n<h3 class="menuheader"><a href="index.php/component/workers?task=update_personal_info">Update Personal Information</a></h3>\r\n<div class="shrink_div"> </div>\r\n<h3 class="menuheader"><strong><a href="index.php/component/workers?task=ask_password_change">Change Password</a></strong></h3>\r\n<div class="shrink_div"> </div>\r\n</div>' 1 'loader-menu-position' 0 '0000-00-00 00:00:00' '0000-00-00 00:00:00' '0000-00-00 00:00:00' 1 'mod_custom' 2 1 '{"prepare_content":"1","backgroundimage":"","layout":"_:default","moduleclass_sfx":"","cache":"1","cache_time":"900","cachemode":"static"}' 0 '*'

正如我所說的文件有數百萬行是很難把行的所有格式,在這裏,但至少我們得到了一些東西,可以解析上述各行則認爲是可以接受的。 請建議我如何實現它,因爲這個文件有數百萬條記錄。

+0

考慮使用適當的CSV解析器並避免複雜的正則表達式。 – anubhava

回答

2

您可以使用以下正則表達式:

\\s*,\\s*(?=(?:(?:[^']*'){2})*[^']*$) 

DEMO

+0

這工作得很好,但是當我的輸入像這樣失敗時。編輯了相同的問題並添加了更多細節。 – UmeshR

+0

[This](https://regex101.com/r/mD9cK8/7)是否預計不到?更新你的問題與預期的產出也.. –

+0

好吧,我添加更多的場景,所以它會更好的解析。 – UmeshR

0

好像它僅包含字符串和整數。所以你可以做匹配。

Matcher m = Pattern.compile("'([^']*)'|(\\d+(?:\\.\\d+)?)").matcher(str); 
while(m.find()) 
{ 
System.out.println(m.group(1)); 
System.out.println(m.group(2)); 
}