gpt4 book ai didi

python - 将多个不同的主题标签转换为与 python 的链接

转载 作者:行者123 更新时间:2023-11-28 17:17:36 24 4
gpt4 key购买 nike

目前正在使用 Bottle 开发 Web 服务器并尝试实现接受消息并将其转换为适合显示的 HTML 的功能。有限制

Any hashtags in the text ('#' followed by a sequence of letters, numbers or periods)
are enclosed by a <strong class='hashtag'> tag.
Eg. <strong class='hashtag'>#whatever</strong>

我遇到的问题是当一段文本中有多个主题标签时,因为使用正则表达式可以让我找到特定的主题标签 block ,但 re.sub 将所有主题标签替换为给定的一个值。这就是我所拥有的:

def post_to_html(content):
if (re.search(r'#[\d\w\.]*', content) is not None):
hold = re.search(r'#[\d\w\.]*', content).group(0)
repltxt = "<strong class='hashtag'>{0}</strong>".format(hold)
hold = re.sub(r'#[\d\w\.]*', repltxt, content)
content = hold

给出时:

"#whatever you #want"

输出:

<strong class='hashtag'>#whatever</strong> you <strong class='hashtag'>#whatever</strong>

最佳答案

您实际上可以只使用一次 re.sub 来解决您的问题方法,然后你不必保存任何变量等等:

fixed_content = re.sub(r"(#[\d\w\.]+)", r"<strong class='hashtag'>\1</strong>", content)

您确实需要稍微更改一下正则表达式:

  1. 使用+而不是 *以确保您不匹配任何孤独 #在内容中
  2. 在主题标签匹配部分周围添加括号以创建一个捕获组,以便之后使用 \g<1> 进行反向引用或 \1 .

\g<n>\n就是我们在正则表达式世界中所说的“反向引用”。您也可以有多个捕获组和多个反向引用 - \1 , \2 , \n .根据this定义:

Backreferences match the same text as previously matched by a capturing group

每次需要重用其捕获组的匹配内容时,都可以使用反向引用。在您的情况下,您想保存实际的主题标签供以后使用,因此您可以只使用反向引用 \n 而不是使用额外的临时变量。 .

看一个简单的例子。假设您想要一个正则表达式来替换 HTML <strong>带有 <b> 的标签然后你想出了以下正则表达式:

> pattern = re.compile(r"<strong>.+?</strong>")

这将匹配 <strong> 之间的所有内容和 </strong> ,包括标签。但是,您希望重用这些标签之间的实际元素。因此,让我们通过用方括号包围元素匹配部分来创建一个捕获组:

> pattern = re.compile(r"<strong>(.+?)</strong>")

现在,您的捕获组的内容可以通过 \1 重复使用.如果我们尝试将它与示例文本一起使用,就会发生这种情况:

> pattern.sub(r"<b>\1</b>", "some <strong>text</strong> example")
'some <b>text</b> example'

在处理替换和复杂的正则表达式时,反向引用非常有用。您可以阅读更多关于它们的信息 here并检查 Python 的 documentation了解如何以更高级的方式使用它。

关于python - 将多个不同的主题标签转换为与 python 的链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43391793/

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