मैं सीएसवी फाइलों को पढ़ने और इसके कॉलम को विभाजित करने के लिए रेगेक्स का उपयोग कर रहा हूं। फ़ाइलों का इनपुट बार-बार बदलता है, और यह अप्रत्याशित है कि सामग्री कैसे आएगी (प्रारूप नहीं)। मैं सीएसवी फ़ाइल को पढ़ने और कॉलम को विभाजित करने के लिए पहले से ही निम्नलिखित रेगेक्स का उपयोग करता हूं:

;(?=(?:[^\"]*\"*[^\"]*\")*[^\"]*$)

यह तब तक काम कर रहा था जब तक मुझे इस तरह के इनपुट का सामना नहीं करना पड़ा:

'02'.'018'.'7975';PRODUCT 1;UN;02
'02'.'018'.'7976';PRODUCT 2;UN;02
'02'.'018'.'7977';PRODUCT 3;UN;02
'02'.'018'.'7978';"PRODUCT 4 ; ADDITIONAL INFO";UN;02 // Problem
'02'.'018'.'7979';"PRODUCT 5 ; ADDITIONAL INFO";UN;02 // Problem

मैं समझना चाहता हूं कि मैं अपने रेगेक्स को कैसे समायोजित कर सकता हूं और उद्धरण के अंदर अर्धविराम को अनदेखा करने के लिए इसे अनुकूलित कर सकता हूं।

मैं स्ट्रिंग क्लास से विभाजित विधि के साथ जावा का उपयोग कर रहा हूं।

0
Samuel Torga 22 जून 2017, 23:19
आप किस प्रोग्रामिंग भाषा का उपयोग कर रहे हैं?
 – 
vktec
22 जून 2017, 23:22
जावा। स्ट्रिंग क्लास से विभाजित विधि का उपयोग करना।
 – 
Samuel Torga
22 जून 2017, 23:23
 – 
vktec
22 जून 2017, 23:24
दिलचस्प... मैं इस पार्सर को आजमाउंगा। लेकिन मैं अभी भी उत्सुक हूं कि यह रेगेक्स कैसे काम करता है।
 – 
Samuel Torga
22 जून 2017, 23:31
आपके रेगेक्स के साथ एकमात्र समस्या "* है, बस स्टार को हटाने की जरूरत है।
 – 
horcrux
22 जून 2017, 23:52

1 उत्तर

सबसे बढ़िया उत्तर

ध्यान रखें कि आपको इसके लिए शायद एक पार्सर का उपयोग करना चाहिए, लेकिन यदि आपको रेगेक्स का उपयोग करना चाहिए, तो यहां एक काम करना चाहिए:

;(?=[^"]*(?:(?:"[^"]*){2})*$)

व्याख्या

; अर्धविराम से मेल खाता है।

(?=...) एक सकारात्मक नजरिया है। यह जांचता है कि इसमें निहित पैटर्न वास्तव में मिलान किए बिना मेल खाएगा।

[^"]*(?:(?:"[^"]*){2})*$ सुनिश्चित करता है कि शेष स्ट्रिंग में समान संख्या में उद्धरण हैं।

0
vktec 22 जून 2017, 23:40
यह काम करता हैं! उत्तर के लिए धन्यवाद और मैं फाइलों को पढ़ने के लिए मौजूदा सीएसवी पार्सर का उपयोग करूंगा। एक बार फिर धन्यवाद।
 – 
Samuel Torga
22 जून 2017, 23:47
कोई दिक्कत नहीं है। खुशी है कि तुम्हें इसका हल मिल गया!
 – 
vktec
22 जून 2017, 23:48
क्योंकि \"* बिट उस बोली को वैकल्पिक बनाता है। यदि आप उसमें से * को हटा दें तो यह काम करेगा।
 – 
vktec
22 जून 2017, 23:51