Вы можете сопоставить то, что вам не нужно, и захватить в группе то, что вы хотите сохранить.
Используя re.findall будут возвращены значения группы 1.
После этого вы можете отфильтровать пустые строки.
(?<!\S)(?:\$\s*\d+(?:\,\d+)?|(\d+(?:[ -]\d+)+\.?|\d{3,}))(?!\S)
По частям
(?<!\S)
Утвердить границу пропуска слева (?:
Группа без захвата \$\s*
Совпадение со знаком доллара, 0+ пробельных символов \d+(?:\,\d+)?
Совпадение 1+ цифр с необязательной частью запятой |
Или (
Захват группа 1 \d+
Совпадение 1+ цифр (?:[ -]\d+)+\.?
Повтор пробела или -
1+ с последующим необязательным .
|
Или \d{3,}
Совпадение 3 или более цифр (Или используйте {6,}
для 6 или более
)
Закрыть группу 1
)
Закрыть группу без захвата (?!\S)
Утвердить границу пропуска справа
Regex demo | Python demo * 1 065 * | Другой Python демо
Например
import re
regex = r"(?<!\S)(?:\$\s*(?:\d+(?:\,\d+)?)|(\d+(?:[ -]\d+)+\.?|\d{3,}))(?!\S)"
test_str = ("123456\n"
"1234567890\n"
"12345\n\n"
"12,123\n"
"etc...)
print(list(filter(None, re.findall(regex, test_str))))
Выход
['123456', '1234567890', '12345', '1-2-3', '123-456-789', '123-456-789.', '123-456', '123 456', '123 456 789', '123 456 789.', '123 456 123 456 789', '123', '456', '123', '456', '789']