2013-02-23 4 views
5

में 2 अक्षरों के बीच स्ट्रिंग प्राप्त करने के लिए मुझे एक स्ट्रिंग से नए प्रारूप में कुछ शब्द निकालना होगा। उदाहरण के लिए, मैं इनपुट के साथ फ़ंक्शन को कॉल करें:पायथन

text2function('$sin (x)$ is an function of x') 

और मैं उन्हें एक StringFunction में डाल की जरूरत है:

StringFunction(function, independent_variables=[vari]) 

जहाँ मैं प्राप्त करने की आवश्यकता सिर्फ 'sin (x)' समारोह के लिए और चर के लिए 'एक्स'। तो यह अंततः इस तरह दिखेगा:

StringFunction('sin (x)', independent_variables=['x'] 

समस्या यह है कि, मैं फ़ंक्शन और विविधता प्राप्त नहीं कर सकता। मैंने कोशिश की है:

start = string.index(start_marker) + len(start_marker) 
end = string.index(end_marker, start) 
return string[start:end] 

और

r = re.compile('$()$') 
m = r.search(string) 
if m: 
    lyrics = m.group(1) 

और

send = re.findall('$([^"]*)$',string) 

सब मुझे कुछ भी नहीं दे रहा है लगता है। क्या मुझसे कुछ गलत हो रही है? सभी मदद की सराहना की है। धन्यवाद।

उत्तर

6

$ रेगेक्स में एक विशेष चरित्र है (यह स्ट्रिंग के अंत को दर्शाता है)। आप इसे से बचने के लिए की जरूरत है: क्योंकि अन्यथा यह एक ही स्थान पर एक ही चरित्र फिर से मिल जाएगा

end = string.index(end_marker, start + 1) 

:

>>> re.findall(r'\$(.*?)\$', '$sin (x)$ is an function of x') 
['sin (x)'] 
2

आप दूसरे चरित्र के लिए खोज शुरू करने के लिएstart परे की जरूरत

>>> start_marker = end_marker = '$' 
>>> string = '$sin (x)$ is an function of x' 
>>> start = string.index(start_marker) + len(start_marker) 
>>> end = string.index(end_marker, start + 1) 
>>> string[start:end] 
'sin (x)' 

आपके नियमित अभिव्यक्तियों के लिए, $ चरित्र को एन्को के रूप में व्याख्या किया जाता है आर, शाब्दिक चरित्र नहीं। यह शाब्दिक $ मैच के लिए भागने (और चीजें हैं जो नहीं$ के बजाय कर रहे हैं के लिए देखो " नहीं:

send = re.findall('\$([^$]*)\$', string) 

जो देता है:

>>> import re 
>>> re.findall('\$([^$]*)\$', string) 
['sin (x)'] 

नियमित अभिव्यक्ति $()$ अन्यथा वास्तव में मेल नहीं खाता $ वर्णों से बचने के बावजूद कोष्ठक के बीच कुछ भी।

5

ट्वीकी रास्ता !

>>> char1 = '(' 
>>> char2 = ')' 
>>> mystr = "mystring(123234sample)" 
>>> print mystr[mystr.find(char1)+1 : mystr.find(char2)] 
123234sample 
+1

मुझे वास्तव में यह समाधान पसंद है जो मैं कर रहा हूं। – Jiminion