मेरे पास यह स्ट्रिंग है:

"<span class='break'><div class='name-and-date'><strong>Mr. Talon 
 Williamson - Dec 18,  1:47 PM Eastern</div></strong><div class='note-
 contents'>- wrong</div></span><span class='break'><div class='name-and-
 date'><strong>Mr. Talon Williamson - Dec 18,  1:47 PM Eastern</div>
 </strong><div class='note-contents'>- Wrong again</div></span><span 
 class='break'><div class='name-and-date'><strong>Mr. Talon Williamson 
 - Dec 18,  1:47 PM Eastern</div></strong><div class='note-contents'>- 
 okay what is the matter with you.</div></span><span class='break'><div 
 class='name-and-date'><strong>Mr. Talon Williamson - Dec 18,  1:50 PM 
 Eastern</div></strong><div class='note-contents'>- Bro!</div></span>"

मैं इस स्ट्रिंग से अंतिम अवधि को कैसे हटा सकता हूं ताकि मुझे यह वापसी मूल्य मिल सके:

"<span class='break'><div class='name-and-date'><strong>Mr. Talon 
 Williamson - Dec 18,  1:47 PM Eastern</div></strong><div class='note-
 contents'>- wrong</div></span><span class='break'><div class='name-and-
 date'><strong>Mr. Talon Williamson - Dec 18,  1:47 PM Eastern</div>
 </strong><div class='note-contents'>- Wrong again</div></span><span 
 class='break'><div class='name-and-date'><strong>Mr. Talon Williamson 
 - Dec 18,  1:47 PM Eastern</div></strong><div class='note-contents'>- 
 okay what is the matter with you.</div></span>"

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

मैं ऐसा कुछ करना चाहता हूं:

string.scan(/<span class='break'>/)

लेकिन वह पूरी स्ट्रिंग को नहीं पकड़ता है और उन्हें सरणी तत्वों में तोड़ देता है।

नोट: मैंने पहले भी इसी तरह का सवाल पूछा था और मैं मदद की सराहना करता हूं लेकिन यह वह नहीं था जिसकी मुझे जरूरत थी।

0
Bitwise 19 पद 2017, 06:17

3 जवाब

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

देखें कि क्या यह मदद करता है। क्या आप यही ढूंढ रहे हैं?

txt = "<span class='break'><div class='name-and-date'><strong>Mr. Talon 
 Williamson - Dec 18,  1:47 PM Eastern</div></strong><div class='note-
 contents'>- wrong</div></span><span class='break'><div class='name-and-
 date'><strong>Mr. Talon Williamson - Dec 18,  1:47 PM Eastern</div>
 </strong><div class='note-contents'>- Wrong again</div></span><span 
 class='break'><div class='name-and-date'><strong>Mr. Talon Williamson 
 - Dec 18,  1:47 PM Eastern</div></strong><div class='note-contents'>- 
 okay what is the matter with you.</div></span><span class='break'><div 
 class='name-and-date'><strong>Mr. Talon Williamson - Dec 18,  1:50 PM 
 Eastern</div></strong><div class='note-contents'>- Bro!</div></span>"

txt.rindex('<span')
# => 540 
txt.rindex('</span')
# => 700 
txt[txt.rindex('<span'), txt.rindex('</span')]
# => "<span class='break'><div \n class='name-and-date'><strong>Mr. Talon Williamson - Dec 18,  1:50 PM \n Eastern</div></strong><div class='note-contents'>- Bro!</div></span>" 
txt[txt.rindex('<span'), txt.rindex('</span')] = ""
txt
# => "<span class='break'><div class='name-and-date'><strong>Mr. Talon \n Williamson - Dec 18,  1:47 PM Eastern</div></strong><div class='note-\n contents'>- wrong</div></span><span class='break'><div class='name-and-\n date'><strong>Mr. Talon Williamson - Dec 18,  1:47 PM Eastern</div>\n </strong><div class='note-contents'>- Wrong again</div></span><span \n class='break'><div class='name-and-date'><strong>Mr. Talon Williamson \n - Dec 18,  1:47 PM Eastern</div></strong><div class='note-contents'>- \n okay what is the matter with you.</div></span>"
2
sawa 19 पद 2017, 08:13

आप इसे कई तरह से कर सकते हैं।

मान लीजिए कि आपके पास txt वेरिएबल में वह स्ट्रिंग है तो txt.split("<span class='break'")[0..-2].join("<span class='break") आसानी से काम करेगा। यह केवल रास्ते की बात है।

2
Manishh 19 पद 2017, 06:47

निम्नलिखित तब तक काम करेंगे जब तक span वर्ग "break" वाले नेस्टेड span नहीं हो सकते।

input.scan(%r|<span\s+class=['"]break["']>.*?</span>|m)[0...-1].join

थोड़ा धीमा, लेकिन हमेशा इरादा के अनुसार काम करता है:

input[%r|.*(?=<span\s+class=['"]break["']>.*?</span>\z)|m]

बाद वाला समाधान पॉजिटिव लुकहेड का उपयोग करता है ताकि अंतिम पैटर्न के लिए तुरंत सब कुछ सहेजा जा सके। स्ट्रिंग एंड (\z।)

String#[] पर अधिक जानकारी के साथ एक तर्क के रूप में एक नियमित अभिव्यक्ति।

0
Aleksei Matiushkin 19 पद 2017, 10:04