2013-02-19 7 views
6

Tôi có một bó dây nhưng tôi chỉ muốn giữ lại những người thân với định dạng này:Kiểm tra định dạng chuỗi python?

x/x/xxxx xx: xx

cách dễ nhất để kiểm tra xem một chuỗi đáp ứng định dạng này là gì? (Giả sử tôi muốn kiểm tra nếu nó có 2/'s và': ')

+7

Cách đơn giản nhất là chuyển đổi nó thành ngày giờ và bắt lỗi khi không thành công. Đó là một datetime phải không? – Ben

Trả lời

11

thử với cụm từ thông dụng:

import re 
r = re.compile('.*/.*/.*:.*') 
if r.match('x/x/xxxx xx:xx') is not None: 
    print 'matches' 

bạn có thể tinh chỉnh các biểu hiện để phù hợp với nhu cầu của bạn

+1

Thing là, các công cụ như ''xxxxx/xxxxx/x 124453: 24345'' cũng khớp với điều đó. Sử dụng: '././.{4}. {2}:. {2}', giả sử nó là ký tự bất kỳ. Nếu nó phải là chữ số: '\ d/\ d/\ d {4} \ d {2}: \ d {2}' – TyrantWave

+0

, nhưng bài đăng gốc nói: Giả sử tôi muốn kiểm tra nếu nó có 2/'s và': '. Ví dụ này giống như một định dạng ngày, nhưng nó là một ngày? – kofemann

+0

Ông cũng đưa ra một định dạng mà ông muốn giữ trước đây, trông giống hệt như định dạng ngày giờ - tôi cho rằng nó là cần thiết để chính xác với định dạng đó. – TyrantWave

4

Sử dụng time.strptime để phân tích cú pháp từ chuỗi thành cấu trúc thời gian. Nếu chuỗi không khớp với định dạng, nó sẽ tăng ValueError.

3

Nếu bạn sử dụng biểu thức thông thường với trận đấu bạn cũng phải chiếm cuối cùng là quá dài. Nếu không kiểm tra độ dài trong mã này, bạn có thể trượt bất kỳ ký tự không phải là dòng mới nào ở cuối. Đây là mã được sửa đổi từ các câu trả lời khác.

import re 
r = re.compile('././.{4} .{2}:.{2}') 
s = 'x/x/xxxx xx:xx' 
if len(s) == 14: 
    if r.match(s): 
    print 'matches'