Tôi đang cố trích xuất dữ liệu từ một tệp có thể là int hoặc float. Tôi tìm thấy biểu thức chính quy này sẽ lấy tập tin (\d+(\.\d+)?)
để trích xuất cả hai loại, nhưng vấn đề tôi gặp phải là nó chia float thành hai.
>>> nhập lại
>>> line = "(gr_line (bắt đầu 218.948 126.111) (kết thúc 218.948 143.637) (góc 90) (lớp Edge.Cuts) (chiều rộng 0,1) (tstamp 53D2B530))"
>>>
>>> print re.findall(r'\(start (\d+(\.\d+)?) (\d+(\.\d+)?)\)', dòng)
[('218.948', '.948', '126.111', '.111')]
>>>
Điều này làm là lấy tọa độ bắt đầu được xác định bởi (bắt đầu nn), nhưng như bạn có thể thấy, nó chia 218,948 thành 218.948
Và .948
. 126.111
Có cùng một vấn đề.
Nếu chuỗi đầu vào có int trong dấu ngoặc bắt đầu, tôi nhận được thông tin sau:
>>> line = "(gr_line (bắt đầu 218.948 126) (kết thúc 218.948 143.637) (góc 90) (lớp Edge.Cuts) (chiều rộng 0,1) (tstamp 53D2B530))"
>>> print re.findall(r'\(start (\d+(\.\d+)?) (\d+(\.\d+)?)\)', dòng)
[('218.948', '.948', '126', '')]
>>>
Vấn đề ở đây là chỉ mục trống được thêm vào - không phải là vấn đề lớn nhưng hơi bất tiện.
Làm cách nào để định dạng biểu thức chính quy của tôi để nó bắt được một số float và trả về số float đó hoặc nó bắt một số nguyên và trả về số nguyên đó.
bạn đang sử dụng (\d+(\.\d+)?)
Bắt và lưu hai nhóm
Hãy thử điều này:
(\d+(?:\.\d+)?)
Điều này sẽ chỉ lưu toàn bộ nhóm float.
Tôi là một lập trình viên xuất sắc, rất giỏi!