1

文字列があり、文字列が含まれているかどうかを確認する必要があり、文字列の最後でnumber/digit at the endそれをインクリメントする必要がありますnumber/digit+1

以下のように文字列を取得します

string2  = suppose_name_1
string3  = suppose_name_22
string4  = supp22ose45_na56me_45

確かに、上記の形式で文字列を取得しUnderscoreますdigits

したがって、上記の文字列から

  1. 文字列の末尾にアンダースコアの後に数字/数字が含まれているかどうかを確認する必要があります
  2. +1含まれている場合は、以下のようにインクリメントする必要があります

    string2 = 仮定名_ 2

    string3 = 仮定名_ 23

    string4 = supp22ose45_na56me_ 46

正規表現などを使用して Python でこれを行う方法はありますが、それは非常に高速なはずです。

私はここのようなことをしましたが、非常に高速になるreで実装したいので、SOに近づきました

Edit: 申し訳ありませんが、上記で言及されていません

something_name整数が含まれていない場合があるため、最初に数値が含まれているかどうかを確認する必要があります

4

3 に答える 3

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

参考までに、正規表現を使用することに問題や怖い点はありません。

于 2013-08-07T07:28:21.760 に答える
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'
于 2013-08-07T07:27:48.803 に答える
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
于 2013-08-07T07:50:48.760 に答える