2013-02-23 4 views
5

문자열에서 특정 단어를 새 형식으로 가져와야합니다. 예를 들어, I는 입력과 함수를 호출 :파이썬에서 2 자 사이에 문자열 가져 오기

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

을하고 난 StringFunction에 넣어해야합니다

내가 얻을 필요가
StringFunction(function, independent_variables=[vari]) 

단지 '죄 (X)'기능과 변수 '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)' 

일반 표현식의 경우 $ 문자는 ancho로 해석됩니다. r은 문자가 아닙니다. 그것은 문자 그대로 $에 맞게 탈출 (그리고 하지$ 대신 것들을 찾지 " :

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

정규 표현식 $()$ 그렇지 않으면 정말 일치하지 않습니다 제공

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

$ 문자를 이스케이프 처리 했더라도 괄호 사이의 모든 것

5

Tweeky way !

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

나는 정말로 내가하고있는 일에 대해이 해결책을 좋아한다. – Jiminion

관련 문제