मैं एक वाक्य को कुछ शब्दों से विभाजित करना चाहता हूं, उन शब्दों की पहली घटना पर। मुझे समझाने दो:

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)

मैं क्या कर सकता था?

2
Legion 6 जुलाई 2019, 21:55

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):]

यह प्रतिस्थापन, फिर से जुड़ने या लूप का उपयोग नहीं करता है, लेकिन आवश्यक स्ट्रिंग के लिए केवल एक साधारण खोज और उसके स्थितीय परिणाम का उपयोग करता है।

1
M Somerville 6 जुलाई 2019, 22:05
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 
1
İsa GİRİŞKEN 6 जुलाई 2019, 22:04

उस प्रश्न का उत्तर पहले ही इसमें दिया जा चुका है: कैसे निकालें अजगर में एक विशिष्ट वर्ण से पहले सभी वर्ण लेकिन यह केवल एक विशिष्ट सीमांकक के लिए काम करता है, कई सीमांकक के लिए आपको पहले यह पता लगाना होगा कि कौन सा पहले होता है, जो यहां पाया जा सकता है: मैं एक अजगर स्ट्रिंग में एक सबस्ट्रिंग की पहली घटना को कैसे ढूंढ सकता हूं आप पहले अनुमान से शुरू करते हैं, मेरे पास ज्यादा कल्पना नहीं है तो चलिए इसे bestDelimiter = firstDelimiter कहते हैं, इसकी पहली घटना की स्थिति का पता लगाएं, स्थिति को bestPosition = पहली घटना की स्थिति में सहेजें, पदों का पता लगाने के लिए आगे बढ़ें बाकी सीमांकक, हर बार जब आप एक सीमांकक पाते हैं जो वर्तमान सर्वोत्तम स्थिति से पहले होता है, तो आप दोनों चरों को अद्यतन करते हैं bestDelimiter और bestPosition, अंत में जो पहले होता है वह सबसे अच्छा होगा, फिर उस ऑपरेशन को लागू करने के लिए आगे बढ़ें जिसकी आपको bestDelimiter का उपयोग करने की आवश्यकता है

1
user2555216 6 जुलाई 2019, 23:06

आप पहले 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'
0
Ajax1234 6 जुलाई 2019, 22:04

मेरा अनुमान है कि यह सरल अभिव्यक्ति बस ऐसा कर सकती है

.*?(\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))

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

0
Emma 6 जुलाई 2019, 22:42