2011-11-22 29 views
11

Tôi có một tệp được gọi là FILE-1.txt hoặc FILE-340.txt. Tôi muốn có thể lấy số từ tên tập tin. Tôi đã thấy rằng tôi có thể sử dụngLàm cách nào để tìm một số trong chuỗi bằng Python?

numbers = re.findall(r'\d+', '%s' %(filename)) 

để có được một danh sách có chứa số lượng, và sử dụng các số [0] để có được số lượng chính nó như là một chuỗi ... Nhưng nếu tôi biết nó chỉ là một trong số, có vẻ như vòng xoay và không cần thiết làm cho một danh sách để có được nó. Có một cách khác để làm điều này?


Chỉnh sửa: Cảm ơn! Tôi đoán bây giờ tôi có một câu hỏi khác. Thay vì nhận được một chuỗi, làm thế nào để có được số nguyên?

+2

Tôi có hiểu nó một cách chính xác không, bởi ''% s'% (tên tệp)' bạn đang chuyển đổi một chuỗi thành chuỗi? Nếu 'filename' là một chuỗi, thì chỉ cần thay thế' '% s'% (filename) 'bằng' filename'. – Tadeck

+0

Thêm vào nhận xét của Tadeck, nếu 'filename' không phải là một chuỗi thì' str (filename) 'tương đương với' '% s'% filename'. –

Trả lời

18

Sử dụng search thay vì findall:

number = re.search(r'\d+', filename).group() 

Hoặc:

number = filter(str.isdigit, filename) 
+1

Mặc dù 'bộ lọc' tương tự như' re.findall' trong trường hợp có nhiều nhóm số, ví dụ: sử dụng _ "FILE-340-1.txt" _ 'filter' tạo _" 3401 "_ trong khi' re.search' chỉ trả về nhóm đầu tiên _ "340" _. –

1

Nếu bạn muốn chương trình của bạn có hiệu quả

sử dụng này:

num = filename.split("-")[1][:-4] 

này sẽ chỉ làm việc với các ví dụ mà bạn thấy

+0

[1] [: - 4] làm gì? – user1058492

+1

Mất phần thứ hai từ việc tách và cắt 4 ký tự cuối cùng [". Txt"] – Davido

1

Một cách khác chỉ để cho vui:

In [1]: fn = 'file-340.txt' 

In [2]: ''.join(x for x in fn if x.isdigit()) 
Out[2]: '340' 
2

Thêm vào comment FJ, nếu bạn muốn một int, bạn có thể sử dụng:

numbers = int(re.search(r'\d+', filename).group()) 
0

đáp lại câu hỏi mới của bạn, bạn có thể cast string một int:

>>>int('123') 
123 
Các vấn đề liên quan