考虑我在Python2.7上运行的这个示例:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import re
tstr = r''' <div class="thebibliography">
<p class="bibitem" ><span class="biblabel">
[1]<span class="bibsp"> </span></span><a
id="Xtester"></a><span
class="cmcsc-10">A<span
class="small-caps">k</span><span
class="small-caps">e</span><span
class="small-caps">g</span><span
class="small-caps">c</span><span
class="small-caps">t</span><span
class="small-caps">o</span><span
class="small-caps">r</span>,</span>
<span
class="cmcsc-10">P. D.</span><span
class="cmcsc-10"> H. </span> testöng ... . <span
class="cmti-10">Draftin:</span>
<a
href="http://www.example.com/test.html" class="url" ><span
class="cmitt-10">http://www.example.com/test.html</span></a> (2001).
</p>
</div>
'''
# remove <a id>
tout2 = re.sub(r'''<a[\s]*?id=['"].*?['"][\s]*?></a>''', " ", tstr, re.DOTALL)
# remove class= in <a
regstr = r'''(<a.*?)(class=['"].*?['"])([\s]*>)'''
print( re.findall(regstr, tout2, re.DOTALL)) # finds
print("------") #
print( re.sub(regstr, "AAAAAAA", tout2, re.DOTALL )) # does nothing?
当我运行这个命令时-第一个正则表达式被替换/sub'd,正如预期的那样(不见了);然后在输出中我得到:
[('<a\nhref="http://www.example.com/test.html" ', 'class="url"', ' >')]
。。。这意味着第二个正则表达式编写正确(三个部分都找到了)-但是,当我尝试用“aaaaaaaaa”替换所有片段时-在输出的这部分中什么也没有发生:
------
<div class="thebibliography">
<p class="bibitem" ><span class="biblabel">
[1]<span class="bibsp"> </span></span> <span
class="cmcsc-10">A<span
class="small-caps">k</span><span
class="small-caps">e</span><span
class="small-caps">g</span><span
class="small-caps">c</span><span
class="small-caps">t</span><span
class="small-caps">o</span><span
class="small-caps">r</span>,</span>
<span
class="cmcsc-10">P. D.</span><span
class="cmcsc-10"> H. </span> testöng ... . <span
class="cmti-10">Draftin:</span>
<a
href="http://www.example.com/test.html" class="url" ><span
class="cmitt-10">http://www.example.com/test.html</span></a> (2001).
</p>
</div>
很明显,这里没有“aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa。你知道吗
问题是什么?我应该怎么做才能让sub
替换那些显然已经找到的匹配项?你知道吗
为什么不使用HTML解析器来解析和修改
HTML
。你知道吗例如,使用^{} 和^{} :
这将用
AAAAAA
文本替换所有具有id
属性的链接:另请参见:
您的替代品由于使用不当而无法使用回复sub方法,如果您查看文档:
但是在你的代码里,你把“旗帜”放在“计数”的地方。这就是
re.DOTALL
标志被忽略的原因,因为它位于错误的位置。你知道吗由于不需要使用count参数,因此可以删除
re.DOTALL
标志,改用内联修饰符:然而,使用类似bs4的东西可能更方便。(如@alecxe answer中所示)。你知道吗
很简单:Python标准库参考说语法或
re.sub
是:re.sub(pattern, repl, string, count=0, flags=0)
。所以你的最后一个子实际上是(如re.DOTALL
==16):当您需要时:
最后的潜艇工作得很好。。。你知道吗
相关问题 更多 >
编程相关推荐