2013-09-05 6 views
11

मैं इस regex उपयोग कर रहा हूँ:Regex वैकल्पिक समूह

((?:[a-z][a-z]+))_(\d+)_((?:[a-z][a-z]+)\d+)_(\d{13}) 

इस तरह तार मैच के लिए:

SH_6208069141055_BC000388_20110412101855 

4 समूहों में अलग:

SH 
6208069141055 
BC000388 
20110412101855 

प्रश्न: कैसे कर मैं पहला समूह वैकल्पिक बनाता हूं, ताकि परिणामी समूह खाली स्ट्रिंग हो?
जब भी संभव हो, मैं हर मामले में 4 समूह प्राप्त करना चाहता हूं। इस मामले के लिए

इनपुट स्ट्रिंग:

(?:([a-z]{2,})_)?(\d+)_([a-z]{2,}\d+)_(\d+)$ 

मैं कि क्या इनपुट यकीन नहीं है: (पहले समूह के बाद कोई रेखांकन)

6208069141055_BC000388_20110412101855 

उत्तर

10

आप आसानी से अपने रेगुलर एक्सप्रेशन से सरल बना सकते हैं इस होना करने के लिए पहले समूह के बिना स्ट्रिंग में अंडरस्कोर होगा या नहीं, लेकिन अगर आप पूरी स्ट्रिंग हैं तो आप उपरोक्त रेगेक्स का उपयोग कर सकते हैं।

regex101 demo

आप देख सकते हैं, दूसरे मैच में मिलान समूह 1 खाली है और मिलान किया समूह 2.

पर शुरू होता है
संबंधित मुद्दे