2012-09-24 17 views
91

के बाद एक स्ट्रिंग प्राप्त करें मैं एक विशिष्ट सबस्ट्रिंग के बाद स्ट्रिंग कैसे प्राप्त कर सकता हूं।एक विशिष्ट सबस्ट्रिंग

उदाहरण के लिए मैं सिर्फ अपने लक्ष्य शब्द पर विभाजित करने के लिए

my_string="hello python world , i'm a beginner " 
print my_string.split("world",1)[1] 

विभाजन शब्द (या चरित्र) पर विभाजित करने के लिए ले जाता है स्ट्रिंग प्राप्त करना चाहते हैं के बाद "world"my_string="hello python world , i'm a beginner " में

उत्तर

189

सबसे आसान तरीका शायद है और वैकल्पिक रूप से विभाजन की संख्या के लिए एक सीमा।

इस उदाहरण में "दुनिया" पर विभाजित है और इसे केवल एक विभाजन तक सीमित करें।

+12

"सबसे आसान तरीका शायद आपके लक्षित शब्द पर थूकना है" :-) हाँ, यह करने का सही तरीका है। – Matthias

+5

's/spit/split /' वह उत्तर है, जब तक कि आप वास्तव में अपने डेटा से निराश न हों। लेकिन अन्यथा, सही है। – abarnert

+0

यदि मुझे 'कम' शब्द के साथ एक पाठ को विभाजित करने की आवश्यकता है और इसमें इससे पहले शब्द कम है, तो यह काम नहीं करेगा! –

29
s1 = "hello python world , i'm a beginner " 
s2 = "world" 

print s1[s1.index(s2) + len(s2):] 

आप मामले से निपटने के लिए चाहते हैं जहां s2s1 में मौजूद नहीं है, तो s1.find(s2) का उपयोग के रूप में index करने का विरोध किया। यदि उस कॉल का वापसी मूल्य -1 है, तो s2s1 में नहीं है।

+2

+1 को सरलता से विभाजित करेंगे – shx2

10

आप इस regex का उपयोग कर क्या करना चाहते हैं, तो आप बस एक non-capturing group इस्तेमाल कर सकते हैं, जैसे इतना

(?:world).* 

उदाहरण स्ट्रिंग परीक्षण किया जाता है, शब्द "दुनिया" पाने के लिए और उसके बाद के बाद सब कुछ हड़पने here

+9

कुछ लोगों को सामना करना पड़ता है एक समस्या के साथ सोचते हैं "मुझे पता है, मैं नियमित अभिव्यक्ति का उपयोग करता हूं।" ... अब आपके पास 2 समस्याएं हैं ... –

+2

हाहा, मेरी गलती, मैंने सोचा कि यह रेगेक्स टैग किया गया था इसलिए मैंने एक रेगेक्स जवाब देने की कोशिश की। ओह ठीक है, अब यह है। – Tadgh

+1

यह सब अच्छा है ... यह निश्चित रूप से इस बिल्ली को स्किन करने का एक तरीका है ... हालांकि इस समस्या के लिए ओवरकिल (imho) –

24

मुझे आश्चर्य है कि किसी ने भी partition का उल्लेख नहीं किया है।

def substring_after(s, delim): 
    return s.partition(delim)[2] 

आईएमएचओ, यह समाधान @ arshajii की तुलना में अधिक पठनीय है। इसके अलावा, मुझे लगता है कि @ arshajii सबसे तेज़ होने के लिए सबसे अच्छा है - यह कोई अनावश्यक प्रतियां/सबस्ट्रिंग नहीं बनाता है।

+2

यह एक अच्छा समाधान है, और उस मामले को संभालता है जहां सबस्ट्रिंग बेस स्ट्रिंग का हिस्सा अच्छी तरह से नहीं है। – mattmc3

2

यह एक पुराना सवाल है, लेकिन मुझे एक ही परिदृश्य का सामना करना पड़ा, मुझे एक कम स्ट्रिंग को "कम" शब्द के रूप में इस्तेमाल करने की आवश्यकता है, मेरे लिए समस्या यह थी कि मेरे पास नीचे और नीचे शब्द समान स्ट्रिंग में है।

मैं फिर से मॉड्यूल इस तरह से सटीक शब्द से मेल करने के लिए regex के साथ

import re 

string = '...below...as higher prices mean lower demand to be expected. Generally, a high reading is seen as negative (or bearish), while a low reading is seen as positive (or bullish) for the Korean Won.' 

उपयोग re.split का उपयोग कर इसे हल

stringafterword = re.split('\\blow\\b',string)[-1] 
print(stringafterword) 
' reading is seen as positive (or bullish) for the Korean Won.' 

सामान्य कोड है:

re.split('\\bTHE_WORD_YOU_WANT\\b',string)[-1] 

उम्मीद है कि यह किसी की मदद कर सकता है!

+1

शायद आप इसका उपयोग भी कर सकते हैं: 'string.partition (" low ") [2]' '? ('' '' के दोनों तरफ रिक्त स्थान पर ध्यान दें –

संबंधित मुद्दे