2012-03-27 36 views
18

Nói rằng tôi có một chuỗiLàm thế nào để sử dụng regex với các ký tự tùy chọn trong python?

"3434.35353" 

và chuỗi khác

"3593" 

Làm thế nào để tạo ra một biểu thức chính quy duy nhất có thể để phù hợp với cả hai mà không có tôi cần phải thiết lập các mô hình để cái gì khác nếu khác thất bại? Tôi biết \d+ sẽ khớp với 3593, nhưng nó sẽ không làm bất cứ điều gì cho 3434.35353, nhưng (\d+\.\d+) sẽ chỉ khớp với số thập phân và không trả về kết quả phù hợp cho số 3593.

Tôi hy vọng m.group(1) trở lại:

"3434.35353" 

hoặc

"3593" 

Trả lời

32

Bạn có thể đặt một ? sau khi một nhóm các nhân vật để làm cho nó không bắt buộc.

Bạn muốn một dấu chấm được theo sau bởi bất kỳ số chữ số nào \.\d+, được nhóm lại với nhau (\.\d+), tùy chọn (\.\d+)?. Dính rằng trong mô hình của bạn:

import re 
print re.match("(\d+(\.\d+)?)", "3434.35353").group(1) 
3434.35353 
print re.match("(\d+(\.\d+)?)", "3434").group(1) 
3434 
1

Sử dụng cơ chế "một hoặc không có" lượng hóa, ?. Regex của bạn sẽ trở thành: (\d+(\.\d+)?).

Xem Chương 8 của số TextWrangler manual để biết thêm chi tiết về các định lượng khác nhau có sẵn và cách sử dụng chúng.

3

regex này nên làm việc:

\d+(\.\d+)? 

Nó phù hợp với một quặng hơn chữ số (\d+) tùy ý tiếp theo là một dấu chấm và một hoặc nhiều chữ số ((\.\d+)?).

0

Đọc trên thư viện Python RegEx. Liên kết trả lời câu hỏi của bạn và giải thích lý do.

Tuy nhiên, để phù hợp với một chữ số tiếp theo nhiều chữ số với một số thập phân tùy chọn, bạn có thể sử dụng

re.compile("(\d+(\.\d+)?)") 

Trong ví dụ này,? sau khi nhóm chụp .\d+ chỉ định rằng phần này là tùy chọn.

Example

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