1

我有一个字符串,我需要检查它是否包含一个number/digit at the end字符串,并且需要在number/digit字符串的末尾增加它+1

我将得到如下字符串

string2  = suppose_name_1
string3  = suppose_name_22
string4  = supp22ose45_na56me_45

我肯定会得到上述格式的字符串,比如假设_somthing Underscore++digits

所以从上面的字符串

  1. 我需要在下划线后检查字符串末尾是否包含数字/数字
  2. 如果它包含然后需要+1像下面这样增加它

    string2 = 假设名称_ 2

    string3 = 假设名称_ 23

    string4 = supp22ose45_na56me_46

我们如何在 python 中通过使用正则表达式或其他东西来做到这一点,但这应该非常快。

我在这里做了类似的事情,但是想用 re 来实现,这将非常快,所以接近了

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 回答