2013-08-07 7 views
1

У меня есть строка, и мне нужно, чтобы проверить, содержит ли он number/digit at the end строки, и нужно увеличивать, что number/digit в конце строки с +1Проверьте, содержит ли строка числовое/цифру/число в питоне

я буду получать строки, как показано ниже

string2 = suppose_name_1 
string3 = suppose_name_22 
string4 = supp22ose45_na56me_45 

наверняка я получу строку в таком формате, как suppose_somthing + Underscore + digits

так из вышеуказанные строки

  1. мне нужно проверить, содержит ли строка номер/цифры в конце строки после подчеркивания
  2. Если он содержит, то нужно увеличивать, что с +1 как ниже

    string2 = suppose_name_

    string3 = suppose_name_

    String4 = supp22ose45_na56me_

Как мы можем сделать это в Python с использованием регулярных выражений или что-то, но это должно быть очень быстрым.

я сделал что-то вроде here, но хочу реализовать с ре, что будет очень быстро, поэтому подошел SO

Edit: жаль din't упомянутой выше

Иногда он содержит только something_name без числа, поэтому мне нужно проверить, содержит ли он число в нем сначала

+0

Вы сказали что ваши строки будут точно в этом формате? Тогда почему вы должны проверить, заканчивается ли строка цифрами или нет? –

ответ

1

Не нужно регулярное выражение. Вы можете просто использовать простой str.replace:

>>> s = 'suppose_name_1' 
>>> index = s.rfind('_') # Last index of '_' 
>>> s.replace(s[index+1:], str(int(s[index+1:]) + 1)) 
'suppose_name_2' 

Если вам необходимо сначала проверить, есть ли у вас цифра в конце, вы можете проверить, что с помощью str.isdigit() метода:

>>> s = 'suppose_name' 
>>> 
>>> index = s.rfind('_') 
>>> if s[index+1:].isdigit(): 
     s = s.replace(s[index+1:], str(int(s[index+1:]) + 1)) 


>>> s 
'suppose_name' 
+0

k rohit, но извините, что я упоминал в вопросе, иногда я получаю только suppose_name без номера в конце, поэтому сначала мне нужно проверить, содержит ли он целое число в нем. –

+0

@shivakrishna. Отредактированный пост. –

2

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

import re 

def process_string(s): 
    try: 
     part1, part2 = re.search('^(.*_)(\d+)$', s).groups() 
     part2 = str(int(part2) + 1) 
     return part1 + part2 
    except AttributeError: 
     return s 

print process_string("suppose_name_1") 
print process_string("suppose_name_22") 
print process_string("supp22ose45_na56me_45") 

print process_string("suppose_name") 

печатает:

suppose_name_2 
suppose_name_23 
supp22ose45_na56me_46 
suppose_name 

FYI, нет ничего неправильного или страшного с использованием регулярных выражений.

1

Вот краткое решение регулярных выражений, которое увеличивает число с помощью re.sub (...):

from re import sub 

string2 = 'suppose_name_1' 
string3 = 'suppose_name_22' 
string4 = 'supp22ose45_na56me_45' 
print [sub(r'^(?P<pretext>.*_)(?P<number>\d+)$', lambda x : '%s%d' % (x.group('pretext'), int(x.group('number')) + 1), s) for s in (string2, string3, string4)] 

и выход:

['suppose_name_2', 'suppose_name_23', 'supp22ose45_na56me_46'] 

Чем легче читать версию будет что-то вроде этого:

from re import sub 

string2 = 'suppose_name_1' 
string3 = 'suppose_name_22' 
string4 = 'supp22ose45_na56me_45' 
regex = r'^(?P<pretext>.*_)(?P<number>\d+)$' 

def increment(matchObject): 
    return '%s%d' % (matchObject.group('pretext'), int(matchObject.group('number')) + 1) 

for s in (string2, string3, string4): 
    print sub(regex, increment, s) 

и выход:

suppose_name_2 
suppose_name_23 
supp22ose45_na56me_46 
Смежные вопросы