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被刪除,它將無法正常工作。由于太復雜,無法在正則表達式中修復,并且需要使用解析器,因為它需要堆。
添加回答
舉報