तो मान लें कि मेरे पास टेक्स्ट का यह ब्लॉक है, लेकिन मैं HELLO WORLD से पहले टेक्स्ट का मिलान करना चाहता हूं। क्या रेगेक्स अभिव्यक्ति उपयुक्त है?

मैंने इसका उपयोग किया है: Te pri\.[?=HELLO WORLD] लेकिन कुछ भी नहीं।

Lorem ipsum dolor sit amet, timeam evertitur ex eos, utamur temporibus disputationi eum te. 
Te pri dicant exerci nonumy, in case erat albucius mei.  
Pertinax periculis concludaturque eum te, et nam vero nominavi deterruisset. HELLO WORLD. 
Ex augue scriptorem pri. Vocent minimum quaerendum duo eu, habemus adipiscing ex eum.

ध्यान रखें, मैं रेगेक्स अभिव्यक्तियों के लिए बिल्कुल नया हूं।

0
dearprudence 26 मई 2018, 23:52

3 जवाब

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

आप यह नियमित अभिव्यक्ति चाहते हैं:

(?s)(Te pri.*?)HELLO WORLD

टूटा हुआ, अभिव्यक्ति के टुकड़े का अर्थ है:

(?s)   -- Make the '.' regex metacharacter match newlines too
(      -- Start a capturing group
Te pri -- Match exactly 'Te pri'
.      -- The dot metacharacter matches any character except newlines
*      -- Match the prior metacharacter, character class or group zero or more times
       -- By default will match as many times as possible
?      -- When paired with '*', it makes '*' match as few times as possible
       -- This way, '.*' doesn't match 'HELLO WORLD'
)      -- End the capturing group

.group() का उपयोग करके समूह में जो कैप्चर किया गया है, उसे एक्सेस करें।

import re
regex = re.compile(r"(?s)(Te pri.*?)HELLO WORLD")
m = regex.match(your_text)
m.group(1)

हैप्पी कोडिंग!

1
Zak 27 मई 2018, 00:30

निम्न का उपयोग करें:-

import re

text = '''Lorem ipsum dolor sit amet, timeam evertitur ex eos, utamur temporibus disputationi eum te. 
Te pri dicant exerci nonumy, in case erat albucius mei.  
Pertinax periculis concludaturque eum te, et nam vero nominavi deterruisset. HELLO WORLD. 
Ex augue scriptorem pri. Vocent minimum quaerendum duo eu, habemus adipiscing ex eu'''


try:
    foundSubString = re.search('(?s)(Te\spri\sdicant.*?)HELLO WORLD', text).group(1)
except AttributeError:
    foundSubString = '' # apply your error handling

print 'Match Found:',foundSubString
1
nandal 27 मई 2018, 00:22

आप जो खोज रहे हैं वह सभी वर्ण . हैं जो एक या अधिक बार + दिखाई देते हैं।

और आप यह सुनिश्चित करना चाहते हैं कि एक और पैटर्न मैच में शामिल किए बिना बाद में आता है, जिसे "पॉजिटिव लुकहेड" (?=) के रूप में भी जाना जाता है।

.+(?=HELLO WORLD)

डेमो 1

यदि आप न्यूलाइन वर्णों का मिलान करना चाहते हैं, तो आप केवल s ध्वज/संशोधक का उपयोग करके . के अर्थ का विस्तार कर सकते हैं।

डेमो २

1
jabacchetta 27 मई 2018, 00:57