根據如何值得信賴的來源是,你可以做兩件事情。鑑於
source = """<replace-add>that i dont know you know cause</replace-add> i could help you with <replace-del>that oh</replace-del> <replace-add>us</replace-add> thanks so i just set up a ride <replace-del>for</replace-del> <replace-add>from</replace-add> my daughter <replace-del>tenah dyer</replace-del> <replace-add>clear dire</replace-add>"""
你可以使用正則表達式,像這樣:
import re
from itertools import chain
word_pattern = re.compile(r"(?<=<replace-add>).*?(?=</replace-add>)")
re_words = list(chain.from_iterable(map(str.split, word_pattern.findall(source))))
這如果源這些標籤完全匹配只會工作,沒有任何屬性等
的另一種選擇標準庫是HTML解析:
from html.parser import HTMLParser
class MyParser(HTMLParser):
def get_words(self, html):
self.read_words = False
self.words = []
self.feed(html)
return self.words
def handle_starttag(self, tag, attrs):
if tag == "replace-add":
self.read_words = True
def handle_data(self, data):
if self.read_words:
self.words.extend(data.split())
def handle_endtag(self, tag):
if tag == "replace-add":
self.read_words = False
parser = MyParser()
html_words = parser.get_words(source)
這種方法會更可靠,一個d可能會更有效一些,因爲它使用完全集中於此任務的工具。
現在,做
print(re_words)
print(html_words)
我們得到
['that', 'i', 'dont', 'know', 'you', 'know', 'cause', 'us', 'from', 'clear', 'dire']
['that', 'i', 'dont', 'know', 'you', 'know', 'cause', 'us', 'from', 'clear', 'dire']
(當然,這個名單的len
是單詞的數量。)
如果嚴格只是需要數的話,你可以只保留一個運行總數,並將data.split
的長度添加到每個遇到的數據中。
如果你真的不能進行任何導入,你要麼做出一些犧牲,要麼必須實現你自己的正則表達式引擎/ html解析器。如果這是家庭作業的一項要求,那麼你真的應該表現出一些事先的努力來發布這個問題。
那你是指所有在這些標籤之間出現的以空格分隔的字符串?爲了清楚起見,你能否包括預期的樣本輸出?此外,嘗試用四個空格縮進來格式化代碼。我們可以假設標籤會像這樣發生,還是可以有屬性? –
等。但上的示例就足夠了。 –
Tim