1 回答

TA贡献1833条经验 获得超4个赞
您可以为此使用正则表达式。此外,您可能会发现一个在线界面很有帮助,例如这个界面,因为正则表达式可能变化无常,并且在语言/库之间的操作方式不同,并且具有标志(不区分大小写、支持 unicode 等)。
我为您的问题提出的问题如下:
<div><!--googleoff: index-->.*?</div>
胡说八道.*?是什么意思?
.表示“匹配任何字符”
*意思是'匹配前面的东西任意次数[包括零]'
“?” 意思是“使前一个匹配器不贪婪”
我不是正则表达式(正则表达式的常用缩写)上帝,但后者是 python 特定的或至少不是通用的。一些正则表达式引擎可能不支持它们或使用不同的指定方式。那么它们在一起是什么意思呢?
.*表示“匹配任何字符任意多次”(基本上,任何事情都会发生)
.*?意思是'匹配任何字符任意次数,但更喜欢更短'
默认情况下,正则表达式匹配在大多数引擎中都是贪婪的。为什么我们想要不贪婪?如果你有重复,想象我们有输入:
<span>TEXT</span><div><!--googleoff: index--> some other text</div><p>Some string</p><div><!--googleoff: index--> some more text</div>
贪婪方法(没有?)会导致以下错误输出:
<span>TEXT</span>
代替
<span>TEXT</span><p>Some string</p>
那么,如何在 Python 中执行此操作?像这样:
import re
regex = r"<div><!--googleoff: index-->.*?</div>"
input = "<span>TEXT</span><div><!--googleoff: index--> some other text</div><p>Some string</p>"
output = re.sub(regex, "", input)
print(output)
将其用作正则表达式的前缀是一种很好的做法,r因为它可以简化转义,尽管我认为在这种情况下它没有任何区别,但我不想冒险。
请注意,在这个答案中,我忽略了这是某种 HTML/XML/结构化文本,并且有一些方法可以实际解析它并允许您遍历元素树等等。这也可以是一个很好的方法,但是对于一个脚本来说可能是矫枉过正并且会产生意想不到的后果(它是否往返于同一个源栏删除它div?我不会为此而投入火中)。然而,这也意味着存在一些限制(例如,如果div标签内有另一个标签div被删除,它将无法正常工作。由于太复杂,无法在正则表达式中修复,并且需要使用解析器,因为它需要堆。
添加回答
举报