2013-02-23 25 views
5

文字列から特定の単語を新しい形式にする必要があります。 Pythonで2文字間の文字列を取得する

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

と私はStringFunctionにそれらを配置する必要があります:たとえば、私は入力して関数を呼び出す

私は機能のためだけの「罪(X)」を取得する必要があります
StringFunction(function, independent_variables=[vari]) 

とvariのための 'x'。だから最終的にこのようになります:

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

正規表現の場合、$文字はアンカーとして解釈されます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

関連する問題