Tiền tệ regex Python

^\$?\-?[[1-9]{1}[0-9]{0,2}[\,\d{3}]*[\. \d{0,2}]?. [1-9]{1}\d{0,}[\. \d{0,2}]?. 0[\. \d{0,2}]?. [\. \d{1,2}]]$. ^\-?\$?[[1-9]{1}\d{0,2}[\,\d{3}]*[\. \d{0,2}]?. [1-9]{1}\d{0,}[\. \d{0,2}]?. 0[\. \d{0,2}]?. [\. \d{1,2}]]$. ^\[\$?[[1-9]{1}\d{0,2}[\,\d{3}]*[\. \d{0,2}]?. [1-9]{1}\d{0,}[\. \d{0,2}]?. 0[\. \d{0,2}]?. [\. \d{1,2}]]\]$

Bài viết này trình bày mọi thứ bạn cần biết về phân tích giá trong Python. Đến cuối bài viết này, bạn sẽ có thể trích xuất giá và đơn vị tiền tệ từ văn bản thô, thường được thu thập từ các nguồn dữ liệu bên ngoài như trang web hoặc tệp

Mục lục

Giới thiệu

Bài viết này đề cập đến một trường hợp cụ thể - chuyển đổi văn bản chưa được xử lý có chứa giá và bất kỳ dữ liệu nào khác giống như tiền thành giá và đơn vị tiền tệ. Đây là một vấn đề phổ biến cần được giải quyết trong các trường hợp quét web, làm sạch dữ liệu và các dự án tương tự mà tiền tệ cần được làm sạch

Dữ liệu tiền tệ có thể ở nhiều định dạng khác nhau, khác nhau, đặc biệt với mã tiền tệ trong ngôn ngữ. Dưới đây là một vài ví dụ

'29,99 €' # Comma as decimal separator
'59,90 EUR'
'$ 9.99' # Period as decimal separator
'9.99 USD'
'Price: $12.99'
'¥ 170 000'
'12,000원'
'₹898.00'
'Price From £ 39.95'

Vì rõ ràng là mọi định dạng đều cần một cách khác nhau để trích xuất tiền tệ và giá trị giá

Bài viết này trước tiên sẽ xem xét cách thực hiện nó bằng Thư viện chuẩn Python. Trong phần thứ hai, một thư viện chuyên dụng cho mục đích này có tên là Price Parser sẽ được xem xét

Phân tích giá bằng thư viện chuẩn Python

Cách tốt nhất để trích xuất dữ liệu số từ bất kỳ chuỗi nào là sử dụng biểu thức chính quy. Các thao tác biểu thức chính quy có thể được thực hiện bằng cách sử dụng mô-đun

expression = '[\d\s.,]*'
8 của Python

Đây sẽ là một quá trình gồm hai phần. Phần đầu tiên là xây dựng biểu thức chính quy và phần thứ hai là sử dụng biểu thức này

Xây dựng biểu thức chính quy

Biểu thức chính quy có thể khó khăn cho người mới bắt đầu. Các trang web như Regexr có thể giúp xây dựng và kiểm tra các biểu thức chính quy

Hãy bắt đầu với một ví dụ

  • Các chữ số có thể khớp với biểu thức chính quy
    expression = '[\d\s.,]*'
    9
  • Giá cũng có thể có dấu phẩy và dấu chấm. Chúng có thể được chọn bằng cách sử dụng
    expression = '[\d\s.,]*\d'
    0 và
    expression = '[\d\s.,]*\d'
    1
  • Giá cũng có thể chứa không gian. Các ký tự khoảng trắng có thể được chọn bằng cách sử dụng
    expression = '[\d\s.,]*\d'
    2
  • Tất cả những điều trên cần được đặt trong một bộ bằng cách sử dụng
    expression = '[\d\s.,]*\d'
    3
  • Có thể có 0 hoặc nhiều trường hợp ở trên. Chúng ta cần sử dụng thẻ đại diện
    expression = '[\d\s.,]*\d'
    4 cho việc này
  • Nếu chúng ta kết hợp tất cả những thứ này trong một tập hợp, biểu thức chính quy thu được sẽ như thế này

expression = '[\d\s.,]*'

Biểu thức này cũng sẽ khớp với khoảng trống bên ngoài đơn vị tiền tệ. Điều này có thể được khắc phục dễ dàng bằng cách nối thêm

expression = '[\d\s.,]*'
9 để đảm bảo rằng ngay cả khi không gian được khớp, nó sẽ kết thúc bằng một số

expression = '[\d\s.,]*\d'

Trong câu lệnh này, tất cả các ký tự từ tập hợp có trong dấu ngoặc vuông sẽ được khớp và dấu hoa thị sẽ đảm bảo rằng 0 hoặc nhiều ký tự trong số này có thể được khớp

Nếu bạn đang xây dựng biểu thức chính quy này tại Regexr, bạn có thể dán vào tất cả các chuỗi và xem chuỗi nào khớp

Bây giờ chúng ta có thể kết hợp mã Python cần thiết để trích xuất giá

expression = '[\d\s.,]*'
1

Biểu thức chính quy này có thể trích xuất giá từ hầu hết các trường hợp

Có một số vấn đề, mặc dù. Các bài toán đầu tiên là dấu phân cách thập phân và dấu phân cách hàng nghìn. Ở một số ngôn ngữ, dấu phẩy được sử dụng cho dấu phân cách thập phân và dấu chấm hoặc dấu cách được sử dụng cho dấu phân cách hàng nghìn

Ví dụ: mười nghìn euro và bốn mươi lăm xu được viết theo hai cách có thể sau

expression = '[\d\s.,]*'
2

Mặt khác, các địa phương khác sử dụng dấu phẩy làm dấu phân cách thập phân và dấu chấm làm dấu phân cách hàng nghìn. Trong trường hợp đó, cùng một mức giá sẽ được viết như thế này

expression = '[\d\s.,]*'
3

Để xử lý việc này, sẽ cần phải viết thêm mã

Cho đến nay, chúng tôi đã không nói về việc lấy tiền và làm sạch giá

Khi chúng tôi thêm nhiều trường hợp hơn, mã sẽ ngày càng phức tạp hơn

Đây là lúc điều quan trọng cần biết là đã có một gói được xuất bản trên Chỉ mục gói Python —Trình phân tích cú pháp giá

Gói phân tích giá

Trình phân tích giá là một gói nhằm mục đích làm cho việc phân tích cú pháp trích xuất giá và tiền tệ từ chuỗi thô dễ dàng hơn nhiều mà không cần đi sâu vào sự phức tạp để xử lý tất cả các trường hợp

Mặc dù Trình phân tích giá được viết để phân tích chuỗi giá đã loại bỏ, nhưng nó hoạt động với các tệp hoặc bất kỳ nguồn dữ liệu nào khác có chứa thông tin tiền tệ ở dạng chuỗi thô, chưa được xử lý

Gói phân tích giá có thể được cài đặt dễ dàng từ thiết bị đầu cuối

expression = '[\d\s.,]*'
4

Nếu bạn đang sử dụng Anaconda, hãy lưu ý rằng nó KHÔNG khả dụng trên bất kỳ kênh nào và do đó bạn cũng sẽ phải sử dụng lệnh

expression = '[\d\s.,]*\d'
6 ở đó

expression = '[\d\s.,]*'
6

Trước khi khám phá cách sử dụng gói này, trước tiên, chúng ta phải hiểu lớp

expression = '[\d\s.,]*'
7 của gói này

Lớp
expression = '[\d\s.,]*'
7

Gói phân tích giá sử dụng một lớp đặc biệt để đại diện cho tiền tệ. Lớp này được đặt tên một cách khéo léo là

expression = '[\d\s.,]*'
7. Lớp
expression = '[\d\s.,]*'
7 có hai thuộc tính quan trọng

  • expression = '[\d\s.,]*'
    11. Giá trị như
    expression = '[\d\s.,]*'
    12
  • expression = '[\d\s.,]*'
    13. Tiền tệ dưới dạng
    expression = '[\d\s.,]*'
    14

Nó cũng có một bộ mô tả dữ liệu

expression = '[\d\s.,]*'
15, sẽ trả về số tiền là
expression = '[\d\s.,]*'
16, thay vì
expression = '[\d\s.,]*'
17

Với suy nghĩ này, hãy xem cách chúng ta có thể phân tích giá

Phân tích giá - Các trường hợp đơn giản

Trình phân tích giá hỗ trợ hai cách phân tích cú pháp. Đây không phải là những cách khác nhau mà chỉ là bí danh. Họ làm điều tương tự

Hai chức năng này là

  • expression = '[\d\s.,]*'
    18
  • expression = '[\d\s.,]*'
    19

Chữ ký của các chức năng này như sau

expression = '[\d\s.,]*\d'
0

Tham số bắt buộc duy nhất là chuỗi giá. Hai tham số còn lại là tùy chọn. Hàm này sẽ trả về một thể hiện của

expression = '[\d\s.,]*'
7

Đây là ví dụ đầu tiên. Trong ví dụ này, có thể thấy cách sử dụng

expression = '[\d\s.,]*'
11,
expression = '[\d\s.,]*'
15 và
expression = '[\d\s.,]*'
13

expression = '[\d\s.,]*\d'
5

Đối với các trường hợp đơn giản, chỉ cần cung cấp chuỗi giá là đủ để phương thức hoạt động. Dưới đây là một số ví dụ khác

expression = '[\d\s.,]*'
0

Giá phân tích cú pháp - Trường hợp phức tạp

Hàm

expression = '[\d\s.,]*'
24 có thể xử lý các chuỗi không sạch và trích xuất số lượng giá và tiền tệ cho hầu hết các trường hợp

expression = '[\d\s.,]*'
1

Thông thường, ký hiệu € được sử dụng làm dấu tách thập phân. Điều này được xử lý bởi Price Parser mà không cần bất kỳ điều chỉnh bổ sung nào

expression = '[\d\s.,]*'
2

Các trường hợp khó khăn đã thảo luận trước đây, trong đó có thể sử dụng dấu cách hoặc dấu chấm vì hàng nghìn dấu phân cách được hỗ trợ ngay lập tức

expression = '[\d\s.,]*'
3

Cả

expression = '[\d\s.,]*'
25 và
expression = '[\d\s.,]*'
26 đều được hiểu là
expression = '[\d\s.,]*'
25. Ngoài ra, nếu số lượng hoặc đơn vị tiền tệ không thể được xác định bởi Trình phân tích giá, nó sẽ trả về một đối tượng
expression = '[\d\s.,]*'
7 với
expression = '[\d\s.,]*'
11 và/hoặc
expression = '[\d\s.,]*'
13 sẽ được đặt thành
expression = '[\d\s.,]*'
31

expression = '[\d\s.,]*'
4

Gợi ý tiền tệ có thể được sử dụng nếu Trình phân tích giá không thể phát hiện tiền tệ. Ví dụ: Các Tiểu vương quốc Ả Rập Thống nhất Dirham được viết là cả AED và Dhs. Trình phân tích giá có thể xử lý AED, nhưng không thể xử lý Dhs. Trong trường hợp này,

expression = '[\d\s.,]*'
32 hữu ích

expression = '[\d\s.,]*'
5

Cuối cùng, nếu đã biết dấu tách thập phân, nó có thể được đặt bằng cách sử dụng đối số

expression = '[\d\s.,]*'
33. Điều này sẽ đảm bảo rằng không có lỗi khi đoán dấu tách thập phân. Đây là một ví dụ

Chủ Đề