क्या कोई कृपया केवल पाइप्स से मिलान करने के लिए रेगेक्स साझा कर सकता है जिसमें उनके बीच कोई उप स्ट्रिंग नहीं है?
उदाहरण के लिए:
एबीसी, एक्सवाईजेड, |||,|||||, ||जी|एफ|,1|2,||||, आर|टी|वाई
मैं केवल चाहता हूँ ||| और ||||| और |||| चयनित।
आपकी सहायता के लिये पहले से ही धन्यवाद।
संपादित करें:
नीचे टिप्पणी में लोगों की मदद का उपयोग करना। मेरे पास एक रेगेक्स है जो आंशिक रूप से काम करता है (?<=^|,\s)?(\|+)(?=,|,$)
हालांकि, यह | . का चयन करता है उप स्ट्रिंग में एफ के बाद ||जी|एफ|
क्या इस रेगेक्स को केवल अल्पविराम के बीच पाइप का चयन करने के लिए संशोधित करने के लिए वैसे भी है जिनके बीच तार नहीं हैं?
1 उत्तर
आपने वह भाषा नहीं दी जिसका आप उपयोग कर रहे हैं। यदि यह पीसीआरई (PHP) और अन्य के रूप में \ K का समर्थन करता है, तो आप निम्नलिखित नियमित अभिव्यक्ति से मेल खाने वाले सबस्ट्रिंग निकालते हैं।
(?:^|,)[^,|]*\K\|{2,}(?=[^,|]*(?:,|$))
रेगेक्स इंजन निम्नलिखित ऑपरेशन करता है।
(?:^|,) # match start of string or ',' in a non-capture group
[^,|]* # match 0+ chars other than ',' and '|'
\K # forget everything matched so far
\|{2,} # match 2+ '|'
(?=
[^,|]* # match 0+ chars other than ',' and '|'
(?:,|$) # match a comma or the end of the string
) # end non-capture group
डेमो लिंक से लिया गया, "\K रिपोर्ट किए गए मैच के शुरुआती बिंदु को रीसेट करता है।"
यदि आप अल्पविराम (जैसे, ,1|2,
) के बीच एकल पाइप का मिलान करना चाहते हैं, तो {2,}
को +
में बदलें।
यदि \K
समर्थित नहीं है, लेकिन एक कैप्चर समूह का उपयोग किया जा सकता है, तो निम्नलिखित रेगुलर एक्सप्रेशन का उपयोग किया जा सकता है।
(?:^|,)[^,|]*(\|{2,})(?=[^,|]*(?:,|$))
प्रत्येक मैच के लिए कैप्चर ग्रुप 1 में रुचि के तार रखे जाते हैं।