Python trích xuất số khoa học từ chuỗi

Ví dụ này cho thấy cách bạn có thể tránh một lỗi phổ biến mà những người thiếu kinh nghiệm với biểu thức chính quy thường mắc phải. Ví dụ: chúng tôi sẽ cố gắng xây dựng một biểu thức chính quy có thể khớp với bất kỳ số dấu phẩy động nào. Biểu thức chính quy của chúng tôi cũng phải khớp với số nguyên và số dấu phẩy động trong đó phần nguyên không được cung cấp. Chúng tôi sẽ không cố khớp các số với số mũ, chẳng hạn như 1. 5e8 (150 triệu ký hiệu khoa học)

Thoạt nghĩ, biểu thức chính quy sau dường như thực hiện thủ thuật. [-+]?[0-9]*\. ?[0-9]*. Điều này xác định số dấu phẩy động là một dấu tùy chọn, tiếp theo là một chuỗi chữ số tùy chọn (phần nguyên), tiếp theo là dấu chấm tùy chọn, tiếp theo là một chuỗi chữ số tùy chọn khác (phần phân số)

Đánh vần regex bằng từ làm cho nó rõ ràng. mọi thứ trong biểu thức chính quy này là tùy chọn. Biểu thức chính quy này tự coi một dấu hoặc một dấu chấm là một số dấu phẩy động hợp lệ. Trên thực tế, nó thậm chí còn coi một chuỗi rỗng là một số dấu phẩy động hợp lệ. Nếu bạn cố gắng sử dụng biểu thức chính quy này để tìm các số dấu phẩy động trong một tệp, thì bạn sẽ nhận được kết quả khớp có độ dài bằng 0 ở mọi vị trí trong chuỗi nơi không có số dấu phẩy động nào xuất hiện

Không thoát khỏi dấu chấm cũng là một lỗi phổ biến. Một dấu chấm không thoát khớp với bất kỳ ký tự nào, kể cả dấu chấm. Nếu chúng tôi không thoát khỏi dấu chấm, cả 4. 4 và 4X4 sẽ được coi là số dấu phẩy động

Khi tạo một biểu thức chính quy, điều quan trọng hơn là xem xét những gì nó không khớp với những gì nó nên. Biểu thức chính quy trên thực sự khớp với một số dấu phẩy động thích hợp, bởi vì công cụ biểu thức chính quy rất tham lam. Nhưng nó cũng phù hợp với nhiều điều chúng tôi không muốn, mà chúng tôi phải loại trừ

Đây là một nỗ lực tốt hơn. [-+]?([0-9]*\. [0-9]+. [0-9]+). Biểu thức chính quy này khớp với một dấu tùy chọn, theo sau là 0 hoặc nhiều chữ số, theo sau là dấu chấm và một hoặc nhiều chữ số (số dấu phẩy động có phần nguyên tùy chọn) hoặc theo sau là một hoặc nhiều chữ số (số nguyên)

Đây là một định nghĩa tốt hơn nhiều. Mọi trận đấu phải bao gồm ít nhất một chữ số. Không có cách nào xung quanh phần [0-9]+. Chúng tôi đã loại trừ thành công các trận đấu mà chúng tôi không muốn. những người không có chữ số

Chúng ta có thể tối ưu hóa biểu thức chính quy này như. [-+]?[0-9]*\. ?[0-9]+

Nếu bạn cũng muốn so khớp các số với số mũ, bạn có thể sử dụng. [-+]?[0-9]*\. ?[0-9]+([eE][-+]?[0-9]+)?. Lưu ý cách tôi tạo toàn bộ phần số mũ tùy chọn bằng cách nhóm nó lại với nhau, thay vì đặt từng phần tử trong số mũ tùy chọn

Cuối cùng, nếu bạn muốn xác thực xem một chuỗi cụ thể có chứa số dấu phẩy động hay không, thay vì tìm số dấu phẩy động trong văn bản dài hơn, bạn sẽ phải neo biểu thức chính quy của mình. ^[-+]?[0-9]*\. ?[0-9]+$ hay ^[-+]?[0-9]*\. ?[0-9]+([eE][-+]?[0-9]+)?$. Bạn có thể tìm thấy các biến thể bổ sung của các biểu thức chính này trong thư viện của RegexBuddy

Bạn có thể hoàn thành tác vụ này rất nhanh với phương thức String#scan và Biểu thức chính quy (regex) phù hợp

Đưa ra một chuỗi s, bạn có thể sử dụng

numbers = s.scan /[-+]?\d*\.?\d+/

các số sẽ là một mảng có các phần tử là số thập phân trong chuỗi s. Lưu ý cách regex xem xét các dấu + hoặc - có thể có trước các số

Nếu bạn cũng muốn khớp số dấu phẩy động với số mũ (ký hiệu khoa học, e. g. 2. 54. e-07), sau đó sử dụng như sau

numbers = s.scan /[-+]?\d*\.?\d+([eE][-+]?\d+)?/ 

Nhận thêm nội dung như thế này

Đăng ký danh sách gửi thư của tôi để nhận các cập nhật tương tự về lập trình

Cảm ơn bạn đã đăng ký. Vui lòng kiểm tra email của bạn để xác nhận đăng ký của bạn

Đã xảy ra sự cố

Tôi tôn trọng quyền riêng tư của bạn và bảo vệ nó một cách nghiêm túc. Vui lòng xem lại trang chính sách bảo mật của tôi để biết thêm chi tiết

Trong bài viết này, nhiệm vụ là hiển thị ký hiệu khoa học dưới dạng float trong Python. Ký hiệu khoa học có nghĩa là bất kỳ số nào được biểu thị bằng lũy ​​thừa của 10. ví dụ- 340 có thể được viết bằng ký hiệu khoa học là 3. 4x102. trong python, chúng tôi sử dụng str. format() trên một số có “{. e}” để định dạng số thành ký hiệu khoa học. str. format() định dạng số dưới dạng số float, theo sau là “e+” và lũy thừa thích hợp là 10. Ví dụ- 340 sẽ được hiển thị là 3. 4e+2

Thí dụ

-51000000000. 0000000 trong ký hiệu khoa học dẫn đến  “5. 10e+10”, trong đó không. sau “e+” biểu thị lũy thừa 10
-5189  trong ký hiệu khoa học dẫn đến  “5. 189e+3”
-439929  trong ký hiệu khoa học dẫn đến  “4. 39929e+5”

Python3




# code

scientific_format__=

numbers = s.scan /[-+]?\d*\.?\d+([eE][-+]?\d+)?/ 
0____11
numbers = s.scan /[-+]?\d*\.?\d+([eE][-+]?\d+)?/ 
2
numbers = s.scan /[-+]?\d*\.?\d+([eE][-+]?\d+)?/ 
3
3.450e+05
0
3.450e+05
1

 

3.450e+05
2____23

đầu ra

5.123490e+08

Trong ví dụ trên, ký hiệu khoa học của 512349000. 000000 sẽ là số thập phân sau chữ số đầu tiên và lũy thừa của 10 tức là- 5. 123490 X 108

Để chỉ bao gồm một số chữ số nhất định sau dấu thập phân, chúng tôi sử dụng “{. Ne}”, trong đó N là số chữ số