Регулярное выражение для выделения последнего встречающегося числа с использованием Python

У меня есть регулярное выражение, которое отделяет число от данной строки.

username = "testuser1" xp = r'^\D+' ma = re.match(xp, username) user_prefix = ma.group(0) print user_prefix 

выход

 testuser 

Но если имя пользователя что-то вроде ниже

 username = "testuser1-1" 

Я получаю следующий результат

 testuser 

что ожидается. Но я ищу следующие

 testuser1- 

В основном регулярное выражение должно выделять последнее встречающееся целое число (а не отдельные цифры).

Резюме

 input = "testuser1" >>> output = testuser input = "testuser1-1" >>> output = testuser1- input = "testuser1-2000" >>> output = testuser1- 

Могу ли я иметь одно регулярное выражение для решения всех вышеперечисленных случаев?

5 Solutions collect form web for “Регулярное выражение для выделения последнего встречающегося числа с использованием Python”

Вы можете использовать re.sub и посмотреть за синтаксисом:

 re.sub(r'(?<=\D)\d+$', '', username) 

Более короткая версия:

 re.sub(r'\d+$', '', username) 

sub больше подходит для этого случая.

Тестовые случаи:

 re.sub(r'\d+$', '', "testuser1-100") # 'testuser1-' re.sub(r'\d+$', '', "testuser1-1") # 'testuser1-' re.sub(r'\d+$', '', "testuser1") # 'testuser' 

Решение, использующее re.match:

 import re username = "testuser1" xp = r'^(.+?)\d+$' ma = re.match(xp, username) user_prefix = ma.groups()[0] user_prefix # 'testuser' # you can also capture the last number xp = r'^(.+?)(\d+)$' ma = re.match(xp, username) user_prefix, user_number = ma.groups() user_prefix, user_number # ('testuser', '1') print re.match(xp, "testuser1-2000").groups() # ('testuser1-', '2000') re.match(xp, "testuser1-2000").groups()[0] # 'testuser1-' re.match(xp, "testuser1-2000").group(1) # 'testuser1-' 

Меньше двигателя с регулярным выражением (учитывая - как единственный токен)

 ^([^\s-]+-|\D+) 

Вот!

 regex_ = '\w+-?(?:\d+)?' 

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

  • Python regex AttributeError: объект 'NoneType' не имеет атрибута 'group'
  • Python лямбда с регулярным выражением
  • Строковые подстановки на основе объекта-сопоставления (Python)
  • Регулярное выражение для включения и исключения определенных IP-адресов
  • Как найти минимальные строки максимальной длины, сгенерированные с учетом регулярного выражения?
  • Разбор нескольких комментариев из js-файла с использованием python
  • Как написать регулярное выражение для соответствия строковому литералу, где escape является удвоением символа кавычки?
  • Как объединить несколько регулярных выражений в одну строку?
  • Python - лучший язык программирования в мире.