如何替换字符串中的数字?

时间:2010-09-21 06:13:01

标签: python regex

好吧我在python中有一个字符串:

str="martin added 1 new photo to the <a href=''>martins photos</a> album."

该字符串在实际使用中包含更多css / html

将1('1 new photo')改为'2 new photos'的最快方法是什么?当然后来'1'可能会说'12'。 注意,我不知道这个号码是什么,所以做一个替换是不可接受的。 我还需要将'photo'更改为'photos',但我可以a .replace(...)。 除非有一个更整洁,更容易解决方案来修改它们?

3 个答案:

答案 0 :(得分:3)

<强>更新

没关系。从评论中可以明显看出OP的要求比问题中出现的要复杂得多。我不认为我的回答可以解决。

原始答案

您可以将字符串转换为模板并存储它。使用占位符表示变量。

template = """%(user)s added %(count)s new %(l_object)s to the 
      <a href='%(url)s'>%(text)s</a> album."""

options = dict(user = "Martin", count = 1, l_object = 'photo', 
      url = url, text = "Martin's album")

print template % options

这期望句子的对象在外部是多元化的。如果您想在模板中使用此逻辑(或更复杂的条件),则应该查看模板引擎,例如JinjaCheetah

答案 1 :(得分:2)

因为你没有解析html,只需使用正则表达式

import re

exp = "{0} added ([0-9]*) new photo".format(name)
number = int(re.findall(exp, strng)[0])

这假设您将始终将带有数字的字符串传递给它。如果没有,您将获得IndexError

除格式化字符串外,我还会存储数字和格式字符串。当数字更改时,重新格式化格式字符串并替换存储的副本。这将是mo'bettah',然后试图解析一个字符串来计算。

在回答你关于html问题的问题时,我不这么认为。您不是要尝试提取html编码的信息,因此您不会使用正则表达式解析html。就这个问题而言,这只是一个字符串。

答案 2 :(得分:2)

听起来这就是你想要的(虽然为什么是另一个问题:^)

import re

def add_photos(s,n):
    def helper(m):
        num = int(m.group(1)) + n
        plural = '' if num == 1 else 's'
        return 'added %d new photo%s' % (num,plural)
    return re.sub(r'added (\d+) new photo(s?)',helper,s)

s = "martin added 0 new photos to the <a href=''>martins photos</a> album."
s = add_photos(s,1)
print s
s = add_photos(s,5)
print s
s = add_photos(s,7)
print s

输出

martin added 1 new photo to the <a href=''>martins photos</a> album.
martin added 6 new photos to the <a href=''>martins photos</a> album.
martin added 13 new photos to the <a href=''>martins photos</a> album.