Попробуйте использовать именованные группы и сделайте каждую часть необязательной (включая тире):
regex = re.compile(r'(?P<feet>[0-9]+\')?\-?(?P<inches>[0-9]+")?')
И измените следующие функции, и вы будете установлены.
def ftbreakdown(*args):
search = regex.search(*args)
print(search)
feetsearch = search.group('feet')
feet = int(feetsearch.split("'")[0]) if feetsearch is not None else 0
return feet
def inbreakdown(*args):
search = regex.search(*args)
print(search)
if search is None:
inches = 0
else:
inchsearch = search.group('inches')
inches = int(inchsearch.split('"')[0]) if inchsearch is not None else 0
# print(inches)
return inches
Этобыстрый и грязный способ, но это работает.Очевидно, вы можете еще больше оптимизировать это.
Пробный прогон
Python 3.6.1 (default, Dec 2015, 13:05:11)
[GCC 4.8.2] on linux
Enter length: 4'-2"
Choose operation: +
Enter length: 6"
<_sre.SRE_Match object; span=(0, 5), match='4\'-2"'>
<_sre.SRE_Match object; span=(0, 2), match='6"'>
<_sre.SRE_Match object; span=(0, 5), match='4\'-2"'>
<_sre.SRE_Match object; span=(0, 2), match='6"'>
4'-8"
Choose operation: