好吧我在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(...)
。
除非有一个更整洁,更容易解决方案来修改它们?
答案 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
这期望句子的对象在外部是多元化的。如果您想在模板中使用此逻辑(或更复杂的条件),则应该查看模板引擎,例如Jinja或Cheetah。
答案 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.