在python中检查字符串是否包含数字/数字/数字

2024-10-01 11:35:01 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我将得到下面的琴弦

string2  = suppose_name_1
string3  = suppose_name_22
string4  = supp22ose45_na56me_45

当然,我会得到上述格式的字符串,比如假设somthing+Underscore+digits

从上面的线索来看

  1. 我需要检查一个字符串是否在下划线后的字符串末尾包含数字/数字
  2. 如果它包含,则需要用+1递增,如下所示

    string2=假设_name_2

    string3=假设_name_23

    字符串4=supp22ose45_na56me_46

我们如何在python中通过使用正则表达式之类的方法来实现这一点,但这应该非常快。在

我已经做了一些类似here的事情,但是想用re实现,这会非常快,所以就这么做了

Edit: 抱歉,我没提到

有时它只包含没有整数的something_name,因此我需要先检查它是否包含数字


Tags: the字符串namenumber数字atend末尾
3条回答

使用正则表达式如何:

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")

印刷品:

^{pr2}$

仅供参考,使用正则表达式没有什么错或可怕的。在

你不需要正则表达式。您只需使用简单的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()方法检查:

^{pr2}$

下面是一个简短的regex解决方案,它使用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)]

以及输出:

^{pr2}$

更容易阅读的版本如下:

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

相关问题 更多 >