कोड:
str = '<br><br />A<br />B'
print(re.sub(r'<br.*?>\w$', '', str))
यह <br><br />A
लौटने की उम्मीद है, लेकिन यह एक खाली स्ट्रिंग ''
रिटर्न!
कोई सुझाव?
कोड:
str = '<br><br />A<br />B'
print(re.sub(r'<br.*?>\w$', '', str))
यह <br><br />A
लौटने की उम्मीद है, लेकिन यह एक खाली स्ट्रिंग ''
रिटर्न!
कोई सुझाव?
लोभ से बाएं से दाएं काम करता है, लेकिन अन्यथा नहीं। इसका मूल रूप से अर्थ है "जब तक आप मिलान नहीं कर लेते तब तक मेल न करें"। यहां क्या हो रहा है:
<br
से मेल खाता है।.*?
अब के लिए अनदेखा किया गया है, यह आलसी है।>
से मिलान करने का प्रयास करें, और सफल हो जाता है।\w
से मिलान करने का प्रयास करें और विफल रहता है। अब यह दिलचस्प है - इंजन बैकट्रैकिंग शुरू करता है, और .*?
नियम देखता है। इस मामले में, .
पहले >
से मेल खाता है, इसलिए अभी भी उस मैच के लिए आशा है।>\w
मिलान कर सकते हैं, लेकिन $
विफल रहता है। फिर, इंजन वापस आलसी .*
शासन के लिए आता है, और जब तक यह <br><br />A<br />B
सौभाग्य से मेल खाता मिलान रहता है,, वहाँ एक आसान समाधान: तुम नहीं <br[^>]*>\w$
बदलकर आपके टैग के बाहर मिलान की अनुमति देते हैं, तो यह अंतिम घटना को प्रतिस्थापित करना चाहिए।
कड़ाई से बोलते हुए, यह HTML के लिए अच्छा काम नहीं करता है, क्योंकि टैग विशेषताओं में >
वर्ण हो सकते हैं, लेकिन मुझे लगता है कि यह सिर्फ एक उदाहरण है।
गैर-लालची बाद में शुरू नहीं होगी। यह पहले <br
से मेल खाता है और बाकी से लालच से मेल नहीं खाएगा, जिसे वास्तव में स्ट्रिंग के अंत में जाना होगा क्योंकि आप $
निर्दिष्ट करते हैं।
जिस तरह से आप चाहते थे काम करने के लिए,
/<br[^<]*?>\w$/
का उपयोग लेकिन आम तौर पर, यह regex का उपयोग करने के लिए कुछ विशेषता के मूल्य के रूप में HTML पार्स करने के लिए <
या >
उस में हो सकता है अनुशंसित नहीं है।
कृपया एक चर नाम के रूप में कभी भी 'str' का उपयोग न करें। –
आपके सुझाव के लिए धन्यवाद। –
उह ... अरे ... आप नियमित अभिव्यक्तियों के साथ HTML को पार्स नहीं कर रहे हैं, है ना? – detly