Разделение чисел из букв

#python #regex #re

#python #регулярное выражение #python-re

Вопрос:

У меня есть столбец, который содержит такие значения, как:

 7D  
13M  
24D  
55D  
 

Я хочу разделить значения на группу цифр, а другую — на букву, чтобы я мог продолжить оценку.

Я довольно близок к использованию встроенного регулярного выражения с помощью этой функции

 def string_split(type: str):
  res = re.findall(('d '), type)
  
  if ["d"] in res:
    return "days"
  if ["m"] in res:
    return "months"
 

прямо сейчас my re.findall возвращает только цифры, а не буквы.

Комментарии:

1. Почему вы ожидаете, что он вернет буквы? d совпадают только цифры.

2. Всегда ли последний символ будет буквой?

3. Ваши строки представлены только в формате numbers-then-D-или-M? Было бы излишним использовать для этого регулярное выражение, и вы могли бы просто сделать numbers, letter = int(s[:-1]), s[-1]

4. Рассмотрим d [md] . Это имеет дополнительное преимущество, заключающееся в сопоставлении только в том случае, если у вас есть символ и цифра.

Ответ №1:

Не используйте re.findall() . Ваши строки всегда представляют собой число, за которым следует буква. Поэтому используйте регулярное выражение, которое соответствует только этому шаблону, а не его разделению.

 def string_split(type: str):
    m = re.match('(d )([A-Z])', type)
    if m:
        num = m.group(1)
        unit = m.group(2)
        if unit == 'D':
            return num, 'days'
        elif unit == 'M':
            return num, 'months'
        else:
            raise ValueError('Invalid unit '   unit)
    else:
        raise ValueError('Invalid interval '   type)
 

Комментарии:

1. Привет, @Barmar, Мино typo ? Должно быть — если единица == измерения ‘D’

2. Да, даже опытные программисты не застрахованы от этой ошибки.