我正在尝试使用python为我的html中的所有h2添加锚点。此代码将添加这些锚点,但我也需要填充锚点的名称。
知道名字可以是循环中匹配的编号还是h2标签之间文本的嵌入版本?
到目前为止,这是代码:
regex = '(?P<name><h2>.*?</h2>)'
text = re.sub(regex, "<a name=''/>"+r"\g<name>", text)
答案 0 :(得分:1)
你可以利用这样一个事实:re.sub
的第二个参数可以成为你想做的任何事情的函数。这是一个将<h2>
元素中的文本细化的示例:
regex = '(?P<name><h2>(.*?)</h2>)' # Note the extra group inside the <h2>
def slugify(s):
return s.replace(' ', '-') # bare-bones slugify
def anchorize(matchobj):
return '<a name="%s"/>%s' % (slugify(matchob.group(2)), matchobj.group(1))
text = re.sub(regex, anchorize, text)
(那slugify
函数显然可以使用一些工作。)
您还可以实现一个版本为anchorize
且使用全局计数器的计数器,或者更好的是,一个跟踪自己的计数器并实现特殊__call__
方法的类。
答案 1 :(得分:0)
不确定我是否理解正确,但是将作者作为名称属性是否足够? 也许你可以使用(只要作者名称不包含属性的无效字符):
regex = '(?P<name><h2>(.*?)</h2>)'
print re.sub(regex, "<a name='\g<2>'/>"+r"\g<name>", text)
如果您需要更高级的替换方法,解析作者姓名或查找某种相关ID,您可以定义替换函数(请参阅re substitute doc):
def name_substitution(matchobj):
name = matchobj.group(2)
# do some processing on name here ...
name = name.replace(' ', '_')
return "<a name='%s'>%s</a>" % (name, matchobj.group(0))
print re.sub(regex, substitution, text)