Personally, I would prefer not to combine the two regular expressions. I think that having two url patterns,
url(r'^input/?$', input, name="input"),
url(r'^input/index.html?$', input),
is more readable than one.
However, if you do want to combine the two, you can use non-capturing parentheses:
r'^input(?:/(?:index.html?)?)?$'
A quick example might help explain:
>>> import re
>>> # first try the regex with capturing parentheses
>>> capturing=r'^input(/(index.html?)?)?$'
>>> # Django passes the two matching strings to the input view, causing the type error
>>> print re.match(capturing, "input/index.html").groups()
('/index.html', 'index.html')
>>> # repeat with non capturing parentheses
>>> non_capturing=r'^input(?:/(?:index.html?)?)?$'
>>> print re.match(non_capturing, "input/index.html").groups()
()
See the Regular Expression Advanced Syntax Reference page for more info.