re.findall("(100|[0-9][0-9]|[0-9])%", "89%")
This returns only result [89] and I need to return the whole 89%. Any ideas how to do it please?
[89]
"89%"
The trivial solution:
>>> re.findall("(100%|[0-9][0-9]%|[0-9]%)","89%") ['89%']
More beautiful solution:
>>> re.findall("(100%|[0-9]{1,2}%)","89%") ['89%']
The prettiest solution:
>>> re.findall("(?:100|[0-9]{1,2})%","89%") ['89%']
>>> re.findall("(?:100|[0-9][0-9]|[0-9])%", "89%") ['89%']
When there are capture groups findall returns only the captured parts. Use ?: to prevent the parentheses from being a capture group.
findall
?:
Use an outer group, with the inner group a non-capturing group:
>>> re.findall("((?:100|[0-9][0-9]|[0-9])%)","89%") ['89%']
"89%"- user1467267