2010-01-16 47 views
18

Tôi muốn trích xuất thông tin từ văn bản được nhập bởi người dùng. Hãy tưởng tượng tôi nhập thông tin sau:Trích xuất chuỗi từ giữa các trích dẫn

SetVariables "a" "b" "c" 

Làm cách nào để trích xuất thông tin giữa tập hợp các trích dẫn đầu tiên? Sau đó, thứ hai? Sau đó, thứ ba?

Trả lời

26
>>> import re 
>>> re.findall('"([^"]*)"', 'SetVariables "a" "b" "c" ') 
['a', 'b', 'c'] 
+0

Có phải dấu chấm phẩy ở cuối dòng cần thiết không? – User

+0

@jspcal Điều này có làm việc cho các dấu nháy đơn không? –

9

Regular expressions là tốt lúc này:

import re 
quoted = re.compile('"[^"]*"') 
for value in quoted.findall(userInputtedText): 
    print value 
20

Bạn có thể làm một String.split() trên đó. Nếu chuỗi được định dạng đúng với dấu ngoặc kép (tức là số lượng dấu ngoặc kép), mọi giá trị lẻ trong danh sách sẽ chứa phần tử nằm giữa dấu ngoặc kép.

>>> s = 'SetVariables "a" "b" "c"'; 
>>> l = s.split('"')[1::2]; # the [1::2] is a slicing which extracts odd values 
>>> print l; 
['a', 'b', 'c'] 
>>> print l[2]; # to show you how to extract individual items from output 
c 

Đây cũng là cách tiếp cận nhanh hơn so với cụm từ thông dụng. Với mô-đun timeit, tốc độ của mã này nhanh hơn khoảng 4 lần:

% python timeit.py -s 'import re' 're.findall("\"([^\"]*)\"", "SetVariables \"a\" \"b\" \"c\" ")' 
1000000 loops, best of 3: 2.37 usec per loop 

% python timeit.py '"SetVariables \"a\" \"b\" \"c\"".split("\"")[1::2];' 
1000000 loops, best of 3: 0.569 usec per loop 
Các vấn đề liên quan