gpt4 book ai didi

python - 用不同的字符串替换每个匹配项

转载 作者:太空宇宙 更新时间:2023-11-03 15:17:15 24 4
gpt4 key购买 nike

我想将文本包装在链接标记中的以下字符串内。我用 re.sub 这样做。它有效,但我还需要 2 个链接标签中的每一个都有不同的 id。如何实现这一目标?

input = "<span>Replace this</span> and <span>this</span>"
result = re.compile(r'>(.*?)<', re.I).sub(r'><a id="[WHAT TO PUT HERE?]" class="my_class">\1</a><', input)

输出在链接标记处应具有不同的 id:

"<span><a id="id1" class="my_class">Replace this</a></span></span> and <span><a id="id2" class="my_class">this</a></span>"

最佳答案

正如 Christian König 的链接所说,使用正则表达式解析 HTML 通常不是一个明智的主意。但是,如果您非常小心,如果 HTML 相对简单且稳定,有时您可以逃脱它,但如果您正在解析的页面格式发生变化,您的代码可能会崩溃。但无论如何...

上面给出的模式不起作用:它还会对 "> and <" 执行替换。

这里有一种方法可以做你想做的事。我们使用一个函数作为 repl arg 至 re.sub ,我们给函数一个计数器(作为函数属性),这样它就知道要使用什么 id 号。每次进行更换时,此计数器都会递增,但您可以在调用 re.sub 之前将计数器设置为您想要的任何值。 .

import re

pat = re.compile(r'<span>(.*?)</span>', re.I)

def repl(m):
fmt = '<span><a id="id{}" class="my_class">{}</a></span>'
result = fmt.format(repl.count, m.group(1))
repl.count += 1
return result
repl.count = 1

data = (
"<span>Replace this</span> and <span>that</span>",
"<span>Another</span> test <span>string</span> of <span>tags</span>",
)

for s in data:
print('In : {!r}\nOut: {!r}\n'.format(s, pat.sub(repl, s)))

repl.count = 10
for s in data:
print('In : {!r}\nOut: {!r}\n'.format(s, pat.sub(repl, s)))

输出

In : '<span>Replace this</span> and <span>that</span>'
Out: '<span><a id="id1" class="my_class">Replace this</a></span> and <span><a id="id2" class="my_class">that</a></span>'

In : '<span>Another</span> test <span>string</span> of <span>tags</span>'
Out: '<span><a id="id3" class="my_class">Another</a></span> test <span><a id="id4" class="my_class">string</a></span> of <span><a id="id5" class="my_class">tags</a></span>'

In : '<span>Replace this</span> and <span>that</span>'
Out: '<span><a id="id10" class="my_class">Replace this</a></span> and <span><a id="id11" class="my_class">that</a></span>'

In : '<span>Another</span> test <span>string</span> of <span>tags</span>'
Out: '<span><a id="id12" class="my_class">Another</a></span> test <span><a id="id13" class="my_class">string</a></span> of <span><a id="id14" class="my_class">tags</a></span>'

关于python - 用不同的字符串替换每个匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43779585/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com