मैं एक वाक्य को कुछ शब्दों से विभाजित करना चाहता हूं, उन शब्दों की पहली घटना पर। मुझे समझाने दो:
message = 'I wish to check my python code for errors to run the program properly with fluency'
मैं उपरोक्त संदेश को for/to/with
की पहली घटना से विभाजित करना चाहता हूं, इसलिए उपरोक्त संदेश का परिणाम check my python code for errors to run the program properly with fluency
होगा
मैं उस शब्द को भी शामिल करना चाहता हूं जिसके साथ मैंने वाक्य को विभाजित किया है, इसलिए मेरा अंतिम परिणाम होगा: to check my python code for errors to run the program properly with fluency
मेरा कोड काम नहीं करता है:
import re
message = 'I wish to check my python code for errors to run the program properly with fluency'
result = message.split(r"for|to|with",1)[1]
print(result)
मैं क्या कर सकता था?
5 जवाब
split
पैरामीटर के रूप में रेगेक्स नहीं लेता है (शायद आप पर्ल के बारे में सोच रहे हैं)।
निम्नलिखित वही करता है जो आप चाहते हैं:
import re
message = 'I wish to check my python code for errors to run the program properly with fluency'
result = re.search(r'\b(for|to|with)\b', message)
print message[result.start(1):]
यह प्रतिस्थापन, फिर से जुड़ने या लूप का उपयोग नहीं करता है, लेकिन आवश्यक स्ट्रिंग के लिए केवल एक साधारण खोज और उसके स्थितीय परिणाम का उपयोग करता है।
message = 'I wish to check my python code for errors to run the program properly with fluency'
array = message.split(' ')
number = 0
message_new = ''
for i in range(len(array)):
if array[i] == 'to' or array[i] == 'for':
number=i
break
for j in range(number,len(array)):
message_new += array[j] + ' '
print(message_new)
आउटपुट:
to check my python code for errors to run the program properly with fluency
उस प्रश्न का उत्तर पहले ही इसमें दिया जा चुका है: कैसे निकालें अजगर में एक विशिष्ट वर्ण से पहले सभी वर्ण लेकिन यह केवल एक विशिष्ट सीमांकक के लिए काम करता है, कई सीमांकक के लिए आपको पहले यह पता लगाना होगा कि कौन सा पहले होता है, जो यहां पाया जा सकता है: मैं एक अजगर स्ट्रिंग में एक सबस्ट्रिंग की पहली घटना को कैसे ढूंढ सकता हूं आप पहले अनुमान से शुरू करते हैं, मेरे पास ज्यादा कल्पना नहीं है तो चलिए इसे bestDelimiter = firstDelimiter कहते हैं, इसकी पहली घटना की स्थिति का पता लगाएं, स्थिति को bestPosition = पहली घटना की स्थिति में सहेजें, पदों का पता लगाने के लिए आगे बढ़ें बाकी सीमांकक, हर बार जब आप एक सीमांकक पाते हैं जो वर्तमान सर्वोत्तम स्थिति से पहले होता है, तो आप दोनों चरों को अद्यतन करते हैं bestDelimiter और bestPosition, अंत में जो पहले होता है वह सबसे अच्छा होगा, फिर उस ऑपरेशन को लागू करने के लिए आगे बढ़ें जिसकी आपको bestDelimiter का उपयोग करने की आवश्यकता है
आप पहले for
, to
, और with
के सभी उदाहरण ढूंढ सकते हैं, वांछित मानों पर विभाजित हो सकते हैं, और फिर ब्याह और फिर से जुड़ सकते हैं:
import re
message = 'I wish to check my python code for errors to run the program properly with fluency'
vals, [_, *s] = re.findall(r"\bfor\b|\bto\b|\bwith\b", message), re.split(r"\bfor\b|\bto\b|\bwith\b", message)
result = ''.join('{} {}'.format(a, re.sub("^\s+", "", b)) for a, b in zip(vals, s))
आउटपुट:
'to check my python code for errors to run the program properly with fluency'
मेरा अनुमान है कि यह सरल अभिव्यक्ति बस ऐसा कर सकती है
.*?(\b(?:to|for|with)\b.*)
और re.match
इन पांच विधियों में से सबसे तेज़ हो सकता है:
re.findall
के साथ परीक्षण करें
import re
regex = r".*?(\b(?:to|for|with)\b.*)"
test_str = "I wish to check my python code for errors to run the program properly with fluency"
print(re.findall(regex, test_str))
re.sub
के साथ परीक्षण करें
import re
regex = r".*?(\b(?:to|for|with)\b.*)"
test_str = "I wish to check my python code for errors to run the program properly with fluency"
subst = "\\1"
result = re.sub(regex, subst, test_str)
if result:
print (result)
re.finditer
के साथ परीक्षण करें
import re
regex = r".*?(\b(?:to|for|with)\b.*)"
test_str = "I wish to check my python code for errors to run the program properly with fluency"
matches = re.finditer(regex, test_str, re.MULTILINE)
for matchNum, match in enumerate(matches, start=1):
# FULL MATCH
print ("Match {matchNum} was found at {start}-{end}: {match}".format(matchNum = matchNum, start = match.start(), end = match.end(), match = match.group()))
for groupNum in range(0, len(match.groups())):
groupNum = groupNum + 1
print ("Group {groupNum} found at {start}-{end}: {group}".format(groupNum = groupNum, start = match.start(groupNum), end = match.end(groupNum), group = match.group(groupNum)))
re.match
के साथ परीक्षण करें
import re
regex = r".*?(\b(?:to|for|with)\b.*)"
test_str = "I wish to check my python code for errors to run the program properly with fluency"
print(re.match(regex, test_str).group(1))
re.search
के साथ परीक्षण करें
import re
regex = r".*?(\b(?:to|for|with)\b.*)"
test_str = "I wish to check my python code for errors to run the program properly with fluency"
print(re.search(regex, test_str).group(1))
यदि आप और अधिक एक्सप्लोर करना चाहते हैं, तो अभिव्यक्ति को इस डेमो के ऊपरी दाएं पैनल पर समझाया गया है या इसे संशोधित करें, और इस लिंक में, आप देख सकते हैं कि यह कुछ के साथ कैसे मेल खाएगा नमूना इनपुट, यदि आप चाहें।
संबंधित सवाल
जुड़े हुए प्रश्न
नए सवाल
python
पायथन एक बहु-प्रतिमान है, गतिशील रूप से टाइप किया हुआ, बहुउद्देशीय प्रोग्रामिंग भाषा है। यह एक साफ और एक समान वाक्यविन्यास सीखने, समझने और उपयोग करने के लिए त्वरित होने के लिए डिज़ाइन किया गया है। कृपया ध्यान दें कि अजगर 2 आधिकारिक तौर पर 01-01-2020 के समर्थन से बाहर है। फिर भी, संस्करण-विशिष्ट पायथन सवालों के लिए, [अजगर -२.०] या [अजगर -३.x] टैग जोड़ें। पायथन वेरिएंट (जैसे, ज्योथन, PyPy) या लाइब्रेरी (उदा।, पांडस और न्यूमपी) का उपयोग करते समय, कृपया इसे टैग में शामिल करें।