2024-06-08 16:42:51 发布
网友
我有一个HTML页面,其中列出了主题和页码的长索引。我想找到所有的页码和它们的锚定标记链接,并将页码递减1。在
1
下面是HTML中的一个示例行:
<p class="index">breakeven volume (BEV), <a href="ch02.xhtml#page28">28</a></p>
我试图在这两个位置找到28,并递减1。在
28
到目前为止,我已经找到了这个数字,并用它本身来替换它,但我不知道如何使它减量。目前我的代码:
注意,您可以将一个函数作为repl参数传递给^{},对于pattern“的每个非重叠出现,都将传递一个match对象:
repl
pattern
match
def decrement(match): """Decrement the number in the match.""" return str(int(match.group()) - 1)
请注意,match.group()表示一个整数;要只捕获数字,而不包括>和{},请使用lookarounds(请参见demo):
match.group()
>
这可以满足您的要求:
>>> page_num.sub(decrement, line) '<p class="index">breakeven volume (BEV), <a href="ch02.xhtml#page28">27</a></p>'
并且可以类似地应用于'#page28"'。在
'#page28"'
但是,请注意,通常应该使用一个实际的HTML解析器,而不是正则表达式来解析HTML(它不是一种正则语言)。在
替换时可以使用替换函数:
import re s = '<p class="index">breakeven volume (BEV), <a href="ch02.xhtml#page28">28</a></p>' re.sub(r'page(\d+)">\1', lambda m: 'page{0}">{0}'.format(int(m.group(1)) - 1), s)
结果:
使用page(\d+)">\1我们匹配页面后跟一个数字,后跟一个“>,后跟与第一对括号(\1)中模式中相同的数字。在
page(\d+)">\1
\1
替换函数接受匹配项作为参数。所以我们取匹配的第一组(m.group(1)),这就是数字,我们对它进行解析并递减。然后我们使用递减的数字重建新的字符串。在
m.group(1)
注意,您可以将一个函数作为} ,对于
repl
参数传递给^{pattern
“的每个非重叠出现,都将传递一个match
对象:请注意,},请使用lookarounds(请参见demo):
^{pr2}$match.group()
表示一个整数;要只捕获数字,而不包括>
和{这可以满足您的要求:
并且可以类似地应用于
'#page28"'
。在但是,请注意,通常应该使用一个实际的HTML解析器,而不是正则表达式来解析HTML(它不是一种正则语言)。在
替换时可以使用替换函数:
结果:
^{pr2}$使用
page(\d+)">\1
我们匹配页面后跟一个数字,后跟一个“>,后跟与第一对括号(\1
)中模式中相同的数字。在替换函数接受匹配项作为参数。所以我们取匹配的第一组(
m.group(1)
),这就是数字,我们对它进行解析并递减。然后我们使用递减的数字重建新的字符串。在相关问题 更多 >
编程相关推荐