Проверьте несколько шаблонов регулярных выражений - PullRequest
0 голосов
/ 18 февраля 2019

Я работаю над калькулятором для футов и дюймов.В настоящее время у меня есть программа, которая работает, но до сих пор я могу заставить ее работать, только если вы введете полное измерение (т.е. 4'-0 "вместо 4 'или 0'-6" вместо 6 "). Я хотел быхотел бы иметь возможность проверить его по нескольким шаблонам, чтобы можно было вводить только футы, дюймы, доли дюйма или комбинацию перечисленного выше.

Я попытался создать одну переменную со всемиразличные шаблоны в нем, но я должен что-то упустить, чтобы иметь возможность проанализировать переменную, чтобы найти правильный шаблон (эта попытка закомментирована в коде). Я нашел другой код, используя этот метод, и попытался повторить его, чтобы работать для меняно не повезло. Я также пытался сделать каждый шаблон своей собственной переменной, но потом я не был уверен, как проверить каждый шаблон и определить, был ли он совпадением. Может быть, я слишком обдумываю это и это легко, но я в замешательстве.

Извините за публикацию ссылки на весь код, но я подумал, что вам было легче видеть и использовать то, что я делаюкороль вместо просто фрагментов кода.Заранее благодарю за любую помощь.

Ссылка на код:

https://repl.it/repls/PrestigiousKeyMemorypool

1 Ответ

0 голосов
/ 18 февраля 2019

Попробуйте использовать именованные группы и сделайте каждую часть необязательной (включая тире):

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:
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...