Извлечение строк в указанном формате в python - PullRequest
0 голосов
/ 03 мая 2020

В python Я пишу код для извлечения строки из букв c символов. Код должен извлекать только строку и печатать в следующем формате.

Ввод должен быть дан в виде IND1234AUS1234 (т.е. символы должны быть разделены несколькими цифрами)

Для вышеуказанного ввода python код должен извлекать строки IND и AUS и печататься как IND to AUS

Ввод не должен быть предоставлен ни в каких других форматах, кроме указанных выше, и если он задан в неправильном формате, код должен печатать неверный ввод , (пример неправильных форматов ввода: 1234INDAUS, IND1234, 123IND123AUS, INDAUS1234)

Ниже приведен код, который я пробовал. Он извлекает строку, но я не знаю, как разделить и распечатать как IND to AUS

Моя программа печатает только INDAUS

test_string  = input()
only_alpha = ""
for char in test_string:
    if char.isalpha():
      only_alpha += char
print(only_alpha)

Пожалуйста, помогите мне с кодом. Я не знаю, как написать код для проверки неверных входных данных, как я упоминал выше.

Ответы [ 2 ]

2 голосов
/ 03 мая 2020

Вы должны использовать регулярное выражение для

  1. для проверки содержимого [A-Z]+\d+[A-Z]+\d+: верхний с двумя цифрами дважды
  2. для одновременного извлечения содержимого в верхнем регистре ([A-Z]+)\d+([A-Z]+)\d+ скобки для ввода group anr получает содержимое с помощью .groups()
def extract(value):
    m = re.search(r"([A-Z]+)\d+([A-Z]+)\d+", value)
    if m:
        return " to ".join(m.groups())
    return "Invalid Input"

Тестирование

value = "IND1234AUS1234 "
res = extract(value)
print(res)  # IND to AUS

value = "INDAUS1234 "
res = extract(value)  # Invalid Input
print(res)

Регулярное выражение, проверяющее длину каждой части, будет

"([A-Z]{2,5})\d{1,5}([A-Z]{2,5})\d{1,5}"
0 голосов
/ 03 мая 2020

Это выглядит как идеальный способ использовать регулярные выражения:

def validate(a):
    match = re.match("([A-Z]+)[0-9]+([A-Z]+)[0-9]+", a)
    if not match:
        raise ValueError()
    else:
        return match[1] + " to " + match[2]

>>> validate("IND1234AUS1234")
"IND to AUS"
>>> validate("USD1234EUR1234")
"USD to EUR"
>>> validate("123IND123AUS")
Traceback (most recent call last):
  File "<pyshell#23>", line 1, in <module>
    validate("123IND123AUS")
  File "<pyshell#20>", line 4, in validate
    raise ValueError()
  File "<string>", line None
SyntaxError: <no detail available>

Быстрое объяснение: "([A-Z]+)[0-9]+([A-Z]+)[0-9]+"

  • ([A-Z]+): один или несколько символов AZ, в скобках мы можем проиндексировать их позже
  • [0-9]+: одна или несколько цифр
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...