2 回答
TA贡献1784条经验 获得超8个赞
使用 re.findall用于此目的
以字符串列表的形式返回字符串中模式的所有非重叠匹配项。从左到右扫描字符串,并按找到的顺序返回匹配项。如果模式中存在一个或多个组,则返回组列表;如果模式有多个组,这将是一个元组列表。结果中包含空匹配项
In [1]: a='<.tag> xxxxx<./tag> <.tag>'
In [2]: import re
In [4]: re.findall(r'<[^>]+>|\w+',a)
Out[4]: ['<.tag>', 'xxxxx', '<./tag>', '<.tag>']
In [5]: re.findall(r'<[^>]+>|[^<]+',a)
Out[5]: ['<.tag>', ' xxxxx', '<./tag>', ' ', '<.tag>']
In [17]: [i.strip() for i in re.findall(r'<[^>]+>|[^<]+',a) if not i.isspace()]
Out[17]: ['<.tag>', 'xxxxx', '<./tag>', '<.tag>']
TA贡献1836条经验 获得超3个赞
非常正确,使用解析器。
但是,这会做到:
def f(x):
lst = []
rec = ""
for i in x:
if i == "<":
if rec != "":
lst.append(rec)
rec = ""
rec += i
if i == ">":
lst.append(rec)
rec = ""
return lst
它基本上记录了“<”和“>”之间的所有内容并将其添加到列表中。它还记录所有 ">" 和 "<" 之间的间隙,以便记录诸如“xxxx”之类的内容
添加回答
举报