2013-02-23 35 views
5

Tôi cần nhận một số từ nhất định từ chuỗi trong định dạng mới. Ví dụ, tôi gọi hàm với đầu vào:nhận chuỗi giữa 2 ký tự trong python

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

và tôi cần phải đặt chúng vào một StringFunction:

StringFunction(function, independent_variables=[vari]) 

nơi mà tôi cần để có được chỉ là 'sin (x)' cho chức năng và 'x' cho vari. Vì vậy, nó sẽ trông như thế này cuối cùng:

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

vấn đề là, tôi dường như không thể có được hàm và vari. Tôi đã thử:

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) 

tất cả dường như dường như không có gì cho tôi. Tôi có làm điều gì sai? Tất cả trợ giúp đều được đánh giá cao. Cảm ơn.

Trả lời

6

$ là ký tự đặc biệt trong regex (biểu thị kết thúc chuỗi). Bạn cần phải thoát khỏi nó:

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

Bạn cần bắt đầu tìm kiếm các nhân vật thứ hai ngoàistart:

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

vì nếu không nó sẽ tìm thấy nhân vật cùng một lúc cùng một vị trí một lần nữa:

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

Đối với cụm từ thông dụng của bạn, ký tự $ được hiểu là ancho r, không phải là ký tự chữ. Thoát khỏi nó để phù hợp với nghĩa đen $ (và tìm kiếm những điều không$ thay vì không ":

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

mang đến cho:

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

Các biểu hiện thường xuyên $()$ khác không thực sự phù hợp bất kỳ thứ gì giữa dấu ngoặc đơn ngay cả khi bạn đã thoát khỏi các ký tự $.

5

Cách Tweeky !

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

Tôi thực sự thích giải pháp này cho những gì tôi đang làm. – Jiminion

Các vấn đề liên quan