import re
regex = re.compile(r"(?i)(\d+[.,]?\d+)\s*(?:-.*\bfurnished\s*)?(p/?w|wdk|per week|weekly|/w|p\\.?c\\.?m|mth|pm|per month|per night|pn|p.a)?", flags=re.MULTILINE | re.IGNORECASE)
test_str = ("$350.00\n"
"$450.00 pw\n"
"$320 - fully furnished pw\n"
"$325 per week\n"
"$495pw - Views! White goods!\n"
"$460p/w + gst and outgoings\n"
"$300 wdk\n"
"$390pw / $1695pcm\n"
"$180 pw / $782 pm\n"
"$375 Per Week/Fully Furnished\n"
"$350 pw + GST & Outgoings\n"
"APPLY NOW - From $270 per week\n"
"$185 per night\n"
"$400pw incl. power\n"
"$500 weekly\n"
"$600 per week pw\n"
"$850 per week (Fully furnished)\n"
"FROM $400PW, FURNITURE AND BILLS INCLUDED\n"
"THE DEAL- $780 PER WEEK\n"
"THE DEAL: $1,400 PER WEEK\n"
"$750/W Unfurnished\n"
"$320 - fully furnished pw\n"
"$330 PER WEEK | $1,430 P.C.M\n"
"Enquire Now: $690 per week\n"
"$460 per week / $1999 per month\n"
"$490 per week/Under Application approved\n"
"$1550pw - Location! Rare gem!\n"
"295 per week\n"
"unit 2 - $780pw unit 3 - $760pw\n"
"$2500 pw high, $1600pw low,$380 pn\n"
"from $786 - $1572 per week\n"
"$590 to $639\n"
"$280 - $290 pw")
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