Python split()而不删除分隔符

som*_*me1 80 python split delimiter

这段代码几乎可以满足我的需要..

for line in all_lines:
    s = line.split('>')
Run Code Online (Sandbox Code Playgroud)

除了它删除所有'>'分隔符.

所以,

<html><head>
Run Code Online (Sandbox Code Playgroud)

变成

['<html','<head']
Run Code Online (Sandbox Code Playgroud)

有没有办法使用split()方法但保留分隔符,而不是删除它?

有了这些结果..

['<html>','<head>']
Run Code Online (Sandbox Code Playgroud)

P.M*_*lch 44

d = ">"
for line in all_lines:
    s =  [e+d for e in line.split(d) if e]
Run Code Online (Sandbox Code Playgroud)

  • 这会为结果列表的所有元素添加分隔符,包括没有分隔符的单元素列表...如果您_only_想要将分隔符附加到第一个分割元素,该怎么办? (11认同)
  • 这很草率.如果字符串是"ab"或".ab"并且拆分为".",该怎么办? (8认同)
  • 这将在字符串末尾添加一个分隔符,即使原始字符串末尾不存在分隔符。 (5认同)
  • 这很有效......但我不完全明白发生了什么. (4认同)
  • @ some1它基本上迭代了split的结果,并将分隔符添加回来."s是一个列表,其中该列表中的每个元素都是e + d,其中e是line.split(d)结果中的元素,但只有当e不是空的时候" (3认同)

gb.*_*gb. 32

如果您使用拆分解析HTML,那么您很可能做错了,除非您正在编写针对固定且安全的内容文件的一次性脚本.如果它应该适用于任何HTML输入,你将如何处理类似的东西<a title='growth > 8%' href='#something'>

无论如何,以下对我有用:

>>> import re
>>> re.split('(<[^>]*>)', '<body><table><tr><td>')[1::2]
['<body>', '<table>', '<tr>', '<td>']
Run Code Online (Sandbox Code Playgroud)


Ósc*_*pez 16

这个怎么样:

import re
s = '<html><head>'
re.findall('[^>]+>', s)
Run Code Online (Sandbox Code Playgroud)