根据如何值得信赖的来源是,你可以做两件事情。鉴于
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