import re
test1 = 'url#123'
test2 = 'url'
re.sub('url((?:#[0-9]+)?)', 'new_url\\1', test1)
re.sub('url((?:#[0-9]+)?)', 'new_url\\1', test2)
Как re.sub() необязательную группу соответствия, используя регулярное выражение в Python?