import re
regex = re.compile(r"(?<=Amount Due|Pay This Amount|Total Balance|Total Current Month’s Charges|Amount Now Due|Amount Due|Amount due on|Total Balance on)\s+(\w+)?\s?\$([\d.,]+)", flags=re.MULTILINE | re.IGNORECASE)
test_str = ("Pay this amount $45.50\n\n"
"Pay this amount due Mar04 $56.67 → Does not work with current expression\n\n"
"Amount due $56.78 → works with current expression\n\n"
"Amount due on dec4 $76.45 → does not work with current expression\n\n"
"Total balance $76.45 → works with current expression\n\n"
"Total balance on apr3 $64.34")
matches = regex.finditer(test_str)
for match_num, match in enumerate(matches, start=1):
print(f"Match {match_num} was found at {match.start()}-{match.end()}: {match.group()}")
for group_num, group in enumerate(match.groups(), start=1):
print(f"Group {group_num} found at {match.start(group_num)}-{match.end(group_num)}: {group}")
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Python, please visit: https://docs.python.org/3/library/re.html