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

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 

Bài Viết Liên Quan

Chủ Đề