1 回答

TA貢獻(xiàn)1833條經(jīng)驗(yàn) 獲得超4個(gè)贊
您可以為此使用正則表達(dá)式。此外,您可能會(huì)發(fā)現(xiàn)一個(gè)在線(xiàn)界面很有幫助,例如這個(gè)界面,因?yàn)檎齽t表達(dá)式可能變化無(wú)常,并且在語(yǔ)言/庫(kù)之間的操作方式不同,并且具有標(biāo)志(不區(qū)分大小寫(xiě)、支持 unicode 等)。
我為您的問(wèn)題提出的問(wèn)題如下:
<div><!--googleoff: index-->.*?</div>
胡說(shuō)八道.*?是什么意思?
.表示“匹配任何字符”
*意思是'匹配前面的東西任意次數(shù)[包括零]'
“?” 意思是“使前一個(gè)匹配器不貪婪”
我不是正則表達(dá)式(正則表達(dá)式的常用縮寫(xiě))上帝,但后者是 python 特定的或至少不是通用的。一些正則表達(dá)式引擎可能不支持它們或使用不同的指定方式。那么它們?cè)谝黄鹗鞘裁匆馑寄兀?/p>
.*表示“匹配任何字符任意多次”(基本上,任何事情都會(huì)發(fā)生)
.*?意思是'匹配任何字符任意次數(shù),但更喜歡更短'
默認(rèn)情況下,正則表達(dá)式匹配在大多數(shù)引擎中都是貪婪的。為什么我們想要不貪婪?如果你有重復(fù),想象我們有輸入:
<span>TEXT</span><div><!--googleoff: index--> some other text</div><p>Some string</p><div><!--googleoff: index--> some more text</div>
貪婪方法(沒(méi)有?)會(huì)導(dǎo)致以下錯(cuò)誤輸出:
<span>TEXT</span>
代替
<span>TEXT</span><p>Some string</p>
那么,如何在 Python 中執(zhí)行此操作?像這樣:
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)
將其用作正則表達(dá)式的前綴是一種很好的做法,r因?yàn)樗梢院?jiǎn)化轉(zhuǎn)義,盡管我認(rèn)為在這種情況下它沒(méi)有任何區(qū)別,但我不想冒險(xiǎn)。
請(qǐng)注意,在這個(gè)答案中,我忽略了這是某種 HTML/XML/結(jié)構(gòu)化文本,并且有一些方法可以實(shí)際解析它并允許您遍歷元素樹(shù)等等。這也可以是一個(gè)很好的方法,但是對(duì)于一個(gè)腳本來(lái)說(shuō)可能是矯枉過(guò)正并且會(huì)產(chǎn)生意想不到的后果(它是否往返于同一個(gè)源欄刪除它div?我不會(huì)為此而投入火中)。然而,這也意味著存在一些限制(例如,如果div標(biāo)簽內(nèi)有另一個(gè)標(biāo)簽div被刪除,它將無(wú)法正常工作。由于太復(fù)雜,無(wú)法在正則表達(dá)式中修復(fù),并且需要使用解析器,因?yàn)樗枰选?/p>
添加回答
舉報(bào)