2013-02-23 18 views
5

Potrzebuję uzyskać pewne wyrazy z ciągu w nowym formacie. Na przykład, wywołać funkcję z wejściem:uzyskiwanie ciągu znaków między 2 znakami w pytonie

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

i muszę umieścić je w StringFunction:

StringFunction(function, independent_variables=[vari]) 

gdzie muszę się po prostu 'sin (x)' dla funkcji i "x" dla zmiennej. Tak wyglądałoby to w końcu:

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

Problem polega na tym, że nie mogę uzyskać funkcji i wariacji. Próbowałem:

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

i

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

i

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

wszystko wydaje się wydaje się dać mi niczego. czy robię coś źle? Cała pomoc jest doceniana. Dzięki.

Odpowiedz

6

$ to znak specjalny w wyrażeniu regularnym (oznacza koniec ciągu znaków). Musisz uciec:

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

trzeba rozpocząć poszukiwania drugiego znaku pozastart:

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

bo w przeciwnym razie będzie to znaleźć ten sam znak w tym samym miejscu znowu:

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

W przypadku wyrażeń regularnych znak $ interpretowany jest jako ancho r, a nie literalna postać. Ucieczka to dopasować dosłownego $ (i patrzeć na rzeczy, które są nie$ zamiast nie ":

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

co daje:

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

Wyrażenie regularne $()$ inaczej naprawdę nie pasuje wszystko między nawiasami, nawet jeśli uniknąłeś znaków $.

5

Tweeky way !

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

Bardzo podoba mi się to rozwiązanie dla tego, co robię. – Jiminion

Powiązane problemy