re.findall("(100|[0-9][0-9]|[0-9])%", "89%")
Chỉ trả lại kết quả này [89]
và tôi cần trả lại toàn bộ 89%. Bất kỳ ý tưởng làm thế nào để làm điều đó xin vui lòng?Python - re.findall trả lại kết quả không mong muốn
re.findall("(100|[0-9][0-9]|[0-9])%", "89%")
Chỉ trả lại kết quả này [89]
và tôi cần trả lại toàn bộ 89%. Bất kỳ ý tưởng làm thế nào để làm điều đó xin vui lòng?Python - re.findall trả lại kết quả không mong muốn
Giải pháp tầm thường:
>>> re.findall("(100%|[0-9][0-9]%|[0-9]%)","89%")
['89%']
giải pháp đẹp thêm:
>>> re.findall("(100%|[0-9]{1,2}%)","89%")
['89%']
Giải pháp đẹp nhất:
>>> re.findall("(?:100|[0-9]{1,2})%","89%")
['89%']
>>> re.findall("(?:100|[0-9][0-9]|[0-9])%", "89%")
['89%']
Khi có nhóm chụp findall
lợi nhuận chỉ captu phần màu đỏ. Sử dụng ?:
để ngăn các dấu ngoặc đơn không bị nhóm chụp.
Thay đổi '100 | [0-9] [0-9] | [0-9]' thành '\ d {1,3}' thay đổi ý định của mẫu? – Bryan
Sử dụng một nhóm bên ngoài, với các nhóm bên trong một tổ chức phi chụp nhóm:
>>> re.findall("((?:100|[0-9][0-9]|[0-9])%)","89%")
['89%']
Làm cho nó một chuỗi; '" 89% "' –