2013-07-16 46 views
7

Đây là một trong những thứ mà tôi chắc chắn mình thiếu một vài thứ đơn giản, nhưng ... Trong chương trình mẫu bên dưới, tôi đang cố sử dụng thư viện RE của Python để phân tích cú pháp chuỗi " dòng "để lấy số dấu phẩy động ngay trước dấu phần trăm, tức là" 90.31 ". Nhưng mã luôn in "không khớp".Biểu thức chính quy của Python không khớp với

Tôi đã thử một vài cụm từ thông dụng khác, tất cả đều có cùng kết quả. Tôi đang thiếu gì?

#!/usr/bin/python 
import re 
line = ' 0 repaired, 90.31% done' 
pct_re = re.compile(' (\d+\.\d+)% done$') 
#pct_re = re.compile(', (.+)% done$') 
#pct_re = re.compile(' (\d+.*)% done$') 
match = pct_re.match(line) 
if match: print 'got match, pct=' + match.group(1) 
else: print 'no match' 
+0

Tôi biết đó là điều gì đó tầm thường! Cảm ơn mọi người vì đã trả lời nhanh và hữu ích của bạn. – Matt

Trả lời

15

match chỉ phù hợp với từ bắt đầu của chuỗi. Mã của bạn hoạt động tốt nếu bạn làm pct_re.search(line) thay thế.

4

Bạn nên sử dụng re.findall thay vì:

>>> line = ' 0 repaired, 90.31% done' 
>>> 
>>> pattern = re.compile("\d+[.]\d+(?=%)") 
>>> re.findall(pattern, line) 
['90.31'] 

re.match sẽ phù hợp vào lúc bắt đầu của chuỗi. Vì vậy, bạn sẽ cần phải xây dựng regex cho chuỗi hoàn chỉnh.

2

thử này nếu bạn thực sự muốn sử dụng trận đấu:

re.match(r'.*(\d+\.\d+)% done$', line) 

r '...' là một 'thô' chuỗi bỏ qua một số trình tự thoát, mà là một thực hành tốt để sử dụng với regexp trong python. - kratenko (xem bình luận bên dưới)

+0

Bạn có thể muốn thêm, rằng 'r '...'' là một chuỗi "thô" bỏ qua một số chuỗi thoát, đó là một thực hành tốt để sử dụng với regexp trong python. – kratenko

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