2013-02-23 258 views
5

我需要從字符串中獲取某些單詞以獲得新格式。例如,我打電話與輸入功能:在python中的2個字符之間獲取字符串

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

,我需要把它們放入一個stringFunction中:

StringFunction(function, independent_variables=[vari]) 

,我需要得到公正「的sin(x)」的功能, 'x'爲vari。所以它最終會看起來像這樣:

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

問題是,我似乎無法獲得函數和vari。我曾嘗試:

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

$是正則表達式中的一個特殊字符(它表示字符串的末尾)。你需要逃避它:

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

你需要開始尋找第二個字符超越start

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

,否則它會再次找到在同一地點相同的字符:

>>> 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)' 

對於您的正則表達式,$字符被解釋爲ancho r,而不是文字字符。逃避它相匹配的文字$(和尋找的東西都是不代替$"

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

這給:

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

正則表達式$()$否則並沒有真正匹配即使您確實轉義了$個字符,也會出現括號內的任何內容。

5

Tweeky way !

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

我真的很喜歡這個解決方案,我在做什麼。 – Jiminion 2016-01-08 21:26:54

相關問題