根据来源的可信度,您可以做两件事。鉴于此
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)
这种方法会更可靠,并且可能会更有效,因为它使用完全专注于这项任务的工具。
现在,做
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 解析器。如果这是家庭作业的要求,那么您确实应该在发布问题之前表现出一些努力。