Hướng dẫn extract percentage from string python - trích xuất phần trăm từ chuỗi trăn

2

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Tôi đang cố gắng trích xuất thông tin phần trăm hợp lệ và loại bỏ bất kỳ biểu diễn không chính xác nào khỏi chuỗi bằng cách sử dụng biểu thức thông thường trong Python. Chức năng nên hoạt động như thế này, vì,

0-100%  = TRUE
0.12% = TRUE
23.1245467% = TRUE
9999% = FALSE
8937.2435% = FALSE
7.% = FALSE

Tôi đã kiểm tra một vài giải pháp trong Stack Overflow chỉ trích xuất 0-100%. Tôi đã thử các giải pháp sau,

('(\s100|[123456789][0-9]|[0-9])(\.\d+)+%')
'(\s100|\s\d{1,2})(\.\d+)+%'
'(\s100|\s\d[0-99])(\.\d+)+%'

Tất cả các công việc này cho tất cả các khả năng khác ngoại trừ 0-99%(đưa ra sai) và 12411.23526%(cho đúng). Lý do cho không gian là tôi chỉ muốn trích xuất hai số chữ số.

Hỏi ngày 10 tháng 4 năm 2016 lúc 17:01Apr 10, 2016 at 17:01

Hướng dẫn extract percentage from string python - trích xuất phần trăm từ chuỗi trăn

4

Tìm ra. Vấn đề nằm ở '+' trong biểu thức '(\.\d+)+' trong khi nó đáng lẽ phải là '(\.\d+)*'. Biểu thức đầu tiên dự kiến ​​sẽ có các giá trị thập phân cho bất kỳ giá trị tỷ lệ phần trăm nào trong khi thứ hai không. Phiên bản cuối cùng của tôi được đưa ra dưới đây.

'\s(100|(\d{1,2}(\.\d+)*))%' 

Bạn có thể thay thế \s bằng

('(\s100|[123456789][0-9]|[0-9])(\.\d+)+%')
'(\s100|\s\d{1,2})(\.\d+)+%'
'(\s100|\s\d[0-99])(\.\d+)+%'
0 cho các giá trị tỷ lệ phần trăm khi bắt đầu câu. Ngoài ra, các phiên bản trong phần câu hỏi của tôi đã chấp nhận các giá trị thập phân cho 100 là giá trị phần trăm không hợp lệ.

Đã trả lời ngày 10 tháng 4 năm 2016 lúc 18:10Apr 10, 2016 at 18:10

psunpsunpsun

5759 Huy hiệu bạc13 Huy hiệu Đồng9 silver badges13 bronze badges

2

Tôi sẽ không chỉ dựa vào Regex một mình - nó không có nghĩa là lọc các phạm vi ngay từ đầu. Tốt hơn hãy tìm kiếm các ứng cử viên trong chuỗi của bạn và phân tích chúng một cách lập trình sau đó, như vậy:
Better look for candidates in your string and analyze them programmatically afterwards, like so:

import re

string = """
some gibberish in here 0-100%  = TRUE
some gibberish in here  0.12% = TRUE
some gibberish in here 23.1245467% = TRUE
some gibberish in here  9999% = FALSE
some gibberish in here 8937.2435% = FALSE
some gibberish in here 7.% = FALSE
"""

numbers = []
# look for -, a digit, a dot ending with a digit and a percentage sign
rx = r'[-\d.]+\d%'

# loop over the results
for match in re.finditer(rx, string):
    interval = match.group(0).split('-')
    for number in interval:
        if 0 <= float(number.strip('%')) <= 100:
            numbers.append(number)

print numbers
# ['0', '100%', '0.12%', '23.1245467%']

Đã trả lời ngày 10 tháng 4 năm 2016 lúc 18:16Apr 10, 2016 at 18:16

Jan janJan

41.3k8 Huy hiệu vàng47 Huy hiệu bạc77 Huy hiệu đồng8 gold badges47 silver badges77 bronze badges

Xem xét tất cả các khả năng sau khi Regex hoạt động.

Nếu bạn chỉ bỏ qua

('(\s100|[123456789][0-9]|[0-9])(\.\d+)+%')
'(\s100|\s\d{1,2})(\.\d+)+%'
'(\s100|\s\d[0-99])(\.\d+)+%'
1, tức là regex không bắt giữ không đáng sợ.

Regex:

('(\s100|[123456789][0-9]|[0-9])(\.\d+)+%')
'(\s100|\s\d{1,2})(\.\d+)+%'
'(\s100|\s\d[0-99])(\.\d+)+%'
2
('(\s100|[123456789][0-9]|[0-9])(\.\d+)+%')
'(\s100|\s\d{1,2})(\.\d+)+%'
'(\s100|\s\d[0-99])(\.\d+)+%'
2

Explanation:

  • ('(\s100|[123456789][0-9]|[0-9])(\.\d+)+%')
    '(\s100|\s\d{1,2})(\.\d+)+%'
    '(\s100|\s\d[0-99])(\.\d+)+%'
    
    3 khớp với giới hạn thấp hơn nếu có bất kỳ, như trong trường hợp
    ('(\s100|[123456789][0-9]|[0-9])(\.\d+)+%')
    '(\s100|\s\d{1,2})(\.\d+)+%'
    '(\s100|\s\d[0-99])(\.\d+)+%'
    
    4 với phần thập phân tùy chọn.

  • ('(\s100|[123456789][0-9]|[0-9])(\.\d+)+%')
    '(\s100|\s\d{1,2})(\.\d+)+%'
    '(\s100|\s\d[0-99])(\.\d+)+%'
    
    5 khớp với giới hạn trên hoặc nếu chỉ một số duy nhất có giới hạn
    ('(\s100|[123456789][0-9]|[0-9])(\.\d+)+%')
    '(\s100|\s\d{1,2})(\.\d+)+%'
    '(\s100|\s\d[0-99])(\.\d+)+%'
    
    6 với phần thập phân tùy chọn.

Demo Regex101


Một phiên bản khác của cùng một regex để khớp các lần xuất hiện như vậy trong chuỗi sẽ là loại bỏ mỏ neo

('(\s100|[123456789][0-9]|[0-9])(\.\d+)+%')
'(\s100|\s\d{1,2})(\.\d+)+%'
'(\s100|\s\d[0-99])(\.\d+)+%'
7 và
('(\s100|[123456789][0-9]|[0-9])(\.\d+)+%')
'(\s100|\s\d{1,2})(\.\d+)+%'
'(\s100|\s\d[0-99])(\.\d+)+%'
0 và kiểm tra các chữ số không có chữ số ngay từ đầu.

Regex:

('(\s100|[123456789][0-9]|[0-9])(\.\d+)+%')
'(\s100|\s\d{1,2})(\.\d+)+%'
'(\s100|\s\d[0-99])(\.\d+)+%'
9
('(\s100|[123456789][0-9]|[0-9])(\.\d+)+%')
'(\s100|\s\d{1,2})(\.\d+)+%'
'(\s100|\s\d[0-99])(\.\d+)+%'
9

Demo Regex101

Một phiên bản khác của cùng một regex để khớp các lần xuất hiện như vậy trong chuỗi sẽ là loại bỏ mỏ neo

('(\s100|[123456789][0-9]|[0-9])(\.\d+)+%')
'(\s100|\s\d{1,2})(\.\d+)+%'
'(\s100|\s\d[0-99])(\.\d+)+%'
7 và
('(\s100|[123456789][0-9]|[0-9])(\.\d+)+%')
'(\s100|\s\d{1,2})(\.\d+)+%'
'(\s100|\s\d[0-99])(\.\d+)+%'
0 và kiểm tra các chữ số không có chữ số ngay từ đầu.Apr 10, 2016 at 17:09


Khi được yêu cầu trích xuất tỷ lệ phần trăm từ một chuỗi, các biểu thức thông thường và phương thức ‘Findall, của gói được sử dụng.

Thí dụ

Dưới đây là một minh chứng của cùng một -

import re

my_string = 'Python is % always fun % to learn % and teach'

print("The list is : " )
print(my_string)

my_result = re.findall('\d*%', my_string)

print("The resultant list is : ")
print(my_result)

Đầu ra

The list is :
Python is % always fun % to learn % and teach
The resultant list is :
['%', '%', '%']

Giải trình

  • Các gói cần thiết được nhập vào môi trường.

  • Một chuỗi được xác định và được hiển thị trên bảng điều khiển.

  • Phương pháp ‘Findall, của gói biểu thức chính quy được sử dụng để xác định một mẫu và truyền chuỗi để hoạt động trên nó.

  • Điều này được gán cho một biến.

  • Biến này được hiển thị dưới dạng đầu ra trên màn hình.

Hướng dẫn extract percentage from string python - trích xuất phần trăm từ chuỗi trăn

Cập nhật vào ngày 13 tháng 9 năm 2021 11:27:44

  • Câu hỏi và câu trả lời liên quan
  • Trích xuất số thập phân từ một chuỗi trong Python
  • Chỉ trích xuất các ký tự từ chuỗi đã cho trong Python
  • Python - Trích xuất các phần tử chuỗi từ ma trận hỗn hợp
  • Làm thế nào để trích xuất số từ một chuỗi trong Python?
  • Làm thế nào để trích xuất ngày từ một chuỗi trong Python?
  • Làm thế nào để trích xuất số từ một chuỗi bằng Python?
  • Python regex để trích xuất giá trị số tối đa từ một chuỗi
  • Trích xuất tất cả các số nguyên từ chuỗi trong C ++
  • Trích xuất tên máy chủ từ chuỗi URL trong JavaScript?
  • Làm thế nào để trích xuất dữ liệu từ một chuỗi có biểu thức thông thường Python?
  • Làm thế nào để trích xuất một chuỗi con từ bên trong một chuỗi trong Python?
  • Python - Cách trích xuất tất cả các chữ số từ một chuỗi
  • Trích xuất các chữ số từ danh sách tuple Python
  • Chiết xuất Python Khóa cụ thể từ từ điển?
  • Trích xuất siêu liên kết từ PDF trong Python

Làm thế nào để tôi tìm thấy tỷ lệ phần trăm của một chuỗi trong Python?

Để in một giá trị phần trăm trong Python, hãy sử dụng str.Định dạng () phương thức hoặc chuỗi f trên mẫu ngôn ngữ định dạng "{:. 0%}" ...
x = 2/3 ..
Tỷ lệ phần trăm = str (vòng (x*100)) + '%'.
print(percentage).

Làm thế nào để bạn tìm thấy tỷ lệ phần trăm dữ liệu trong Python?

Một tỷ lệ phần trăm được tính bằng công thức toán học chia giá trị cho tổng của tất cả các giá trị và sau đó nhân tổng số 100. Đây cũng được áp dụng trong các khung dữ liệu của Pandas.Ở đây, phương thức tổng () của chuỗi pandas được xác định trước được sử dụng để tính tổng của tất cả các giá trị của một cột.dividing the value by the sum of all the values and then multiplying the sum by 100. This is also applicable in Pandas Dataframes. Here, the pre-defined sum() method of pandas series is used to compute the sum of all the values of a column.

Làm thế nào để bạn chuyển đổi thành tỷ lệ phần trăm trong Python?

STR.Phương thức định dạng () được sử dụng để chuyển đổi số thành tỷ lệ phần trăm, bằng cách chỉ định số lượng chữ số cần thực hiện sau điểm thập phân.

Làm cách nào để chuyển đổi một phần trăm trong một phần trăm trong Python?

Bản tóm tắt.Để chuyển đổi chuỗi tỷ lệ phần trăm thành số thập phân, hãy sử dụng chức năng được tích hợp trong float với các phương thức chuỗi thay thế như vậy: float ("30,0%". Thay thế ("%", "" "))/100.float("30.0%". replace("%", ""))/100 .