क्या कोई कृपया केवल पाइप्स से मिलान करने के लिए रेगेक्स साझा कर सकता है जिसमें उनके बीच कोई उप स्ट्रिंग नहीं है?

उदाहरण के लिए:

एबीसी, एक्सवाईजेड, |||,|||||, ||जी|एफ|,1|2,||||, आर|टी|वाई

मैं केवल चाहता हूँ ||| और ||||| और |||| चयनित।

आपकी सहायता के लिये पहले से ही धन्यवाद।

संपादित करें:

नीचे टिप्पणी में लोगों की मदद का उपयोग करना। मेरे पास एक रेगेक्स है जो आंशिक रूप से काम करता है (?<=^|,\s)?(\|+)(?=,|,$)

हालांकि, यह | . का चयन करता है उप स्ट्रिंग में एफ के बाद ||जी|एफ|

क्या इस रेगेक्स को केवल अल्पविराम के बीच पाइप का चयन करने के लिए संशोधित करने के लिए वैसे भी है जिनके बीच तार नहीं हैं?

1
brandon lee 8 मई 2020, 00:23

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 में रुचि के तार रखे जाते हैं।

2
Cary Swoveland 8 मई 2020, 01:44